Sqoop 同步数据到mysql, Can't parse input data: '\N'
?Sqoop 同步數(shù)據(jù)到mysql
?
Sqoop? 從hdfs 同步數(shù)據(jù)到mysql 是我們常常遇到的事情
同步分為 分區(qū)表同步和非分區(qū)表同步
需要注意以下幾點(diǎn)
1. hive 中的表 必須是textfile ,不能是有parquet 等壓縮方式的
2.hive 表如果是分區(qū)表,需要每次只能同步一個(gè)分區(qū)的數(shù)據(jù)到 mysql,
如果hive 有多個(gè)分區(qū),只能寫(xiě)多個(gè)腳本,或者多個(gè)循環(huán)調(diào)度,或者將多分區(qū)表落地成一個(gè)非分區(qū)的臨時(shí)表,進(jìn)行同步
hive也可以同步分區(qū)表過(guò)去,只不過(guò)hive一次只能同步一個(gè)分區(qū),hive 是文件形式的啊 ?分區(qū)也只是目錄文件,你一次只能指定一個(gè)目錄 ?不能一下子指定多個(gè)目錄
3.對(duì)于mysql來(lái)說(shuō) ?只是把數(shù)據(jù)(mysql不會(huì)在意這數(shù)據(jù)怎么來(lái)的)插到表里 ? 表是分區(qū)就按分區(qū)字段插 ?不是分區(qū)就直接插
4.hive 推送到mysql 的時(shí)候,并不需要字段 名字對(duì)應(yīng)一致,只要字段個(gè)數(shù)一致,但是數(shù)據(jù)類(lèi)型必須一致,否則會(huì)出現(xiàn),且分區(qū)的那個(gè)字段 在hive 中是偽列,推送的時(shí)候 在mysql 中不能有。 \N 的錯(cuò)誤
5、sqoop會(huì)將 hive 表中空值轉(zhuǎn)換為\N? ,如果MySQL這個(gè)字段是 int ?double ?肯定存儲(chǔ)不了\N,會(huì)報(bào)空值錯(cuò)誤。
6、mysql 中 int ?double 等要注意hive 的字符長(zhǎng)度。
下面寫(xiě)法可以
create table dm.tmp_ae_mid_payback_detail_new as?
select * from dm.ae_mid_payback_detail_new
sqoop export -D mapred.child.java.opts="-Djava.security.egd=file:/dev/../dev/urandom" \
? --connect "jdbc:/app?useUnicode=true&characterEncoding=utf8" \
? --username "dr" \
? --password "yyyy" \
? --input-null-string '\\N' ?--input-null-non-string '\\N' \
? --table amque_mid_payback_detail_new \
? --export-dir /user/hive/warehouse/dm/dm_ae_mid_payback_detail_new \
? --input-fields-terminated-by '\001' \
?
這個(gè)也可以,只不過(guò)只能推送一個(gè)分區(qū),和偽列不可以推送
sqoop export -D mapred.child.java.opts="-Djava.security.egd=file:/dev/../dev/urandom" \
? --connect "jdbc:/app?useUnicode=true&characterEncoding=utf8" \
? --username "dr" \
? --password "yyyy" \
? --input-null-string '\\N' ?--input-null-non-string '\\N' \
? --table amque_mid_payback_detail_new \
? --export-dir /user/hive/warehouse/dm/amque_mid_payback_detail_new/partition_month='2018-11' \
? --input-fields-terminated-by '\001' \
總結(jié)
以上是生活随笔為你收集整理的Sqoop 同步数据到mysql, Can't parse input data: '\N'的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hive 在kettle 作业retu
- 下一篇: mysql实现row_number()和