1.?問題描述
DataX將MySQL數(shù)據(jù)同步到HDFS中時(shí),空值(NULL)存到HDFS中時(shí),默認(rèn)是存儲(chǔ)為空字符串(‘’)。
2.?原因分析
HFDS Writer并未提供nullFormat參數(shù):也就是用戶并不能自定義null值寫到HFDS文件中的存儲(chǔ)格式。默認(rèn)情況下,HFDS Writer會(huì)將null值存儲(chǔ)為空字符串(‘’),而Hive默認(rèn)的null值存儲(chǔ)格式為\N。所以后期將DataX同步的文件導(dǎo)入Hive表就會(huì)出現(xiàn)問題。
3.?解決方案
處理方案有2個(gè):
1. 修改源碼。修改DataX?HDFS?Writer的源碼,增加自定義null值存儲(chǔ)格式的邏輯,將空字符串存儲(chǔ)為\N,這樣hive在建表時(shí)就不用指定格式了。
以上已orc文件寫入為例,同理可以應(yīng)用到textfile格式的處理。
?以上左邊你可以對(duì)其寫死,所有的NULL均轉(zhuǎn)為\\N ,或者像我這邊傳進(jìn)來nullFormat使得NULL作為空還是空字符串取決于你這邊設(shè)置值。
可參考記Datax3.0解決MySQL抽數(shù)到HDFSNULL變?yōu)榭兆址膯栴}_datax nullformat_譚正強(qiáng)的博客-CSDN博客
2. 在Hive中建表時(shí)指定null值存儲(chǔ)格式為空字符串(''),添加: NULL DEFINED AS ‘’
例如:
DROP TABLE IF EXISTS base_province;
CREATE EXTERNAL TABLE base_province
(
`id` STRING COMMENT '編號(hào)',
`name` STRING COMMENT '省份名稱',
`region_id` STRING COMMENT '地區(qū)ID',
`area_code` STRING COMMENT '地區(qū)編碼',
`iso_code` STRING COMMENT '舊版ISO-3166-2編碼,供可視化使用',
`iso_3166_2` STRING COMMENT '新版IOS-3166-2編碼,供可視化使用'
) COMMENT '省份表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
NULL DEFINED AS ''
LOCATION '/base_province/';
4.?運(yùn)行結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-651607.html
5. 參考文章
- http://t.csdn.cn/WmEEW
- hive 空值的處理
- DataX使用、同步MySQL數(shù)據(jù)到HDFS案例_datax mysql同步到hdfs_Redamancy_06的博客-CSDN博客
?文章來源地址http://www.zghlxwxcb.cn/news/detail-651607.html
到了這里,關(guān)于DataX將MySQL數(shù)據(jù)同步到HDFS中時(shí),空值不處理可以嗎的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!