由于我在其中一个字段中有特殊字符,因此我想使用较低的值作为分隔符。 Hive与分隔符(\ 0)一起工作正常但是sqoop因NoSuchElement异常而失败。看起来它没有检测到分隔符为\ 0。
这就是我的hive sqoop脚本的样子。请帮忙。
CREATE TABLE SCHEMA.test
(
name CHAR(20),
id int,
dte_report date
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\0'
LOCATION '/user/$USER/test';
sqoop-export \
-Dmapred.job.name="TEST" \
-Dorg.apache.sqoop.export.text.dump_data_on_error=true \
--options-file ${OPTION_FILE_LOCATION}\conn_mysql \
--export-dir /user/$USER/test \
--input-fields-terminated-by '\0' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
--table MYSQL_TEST \
--validate \
--outdir /export/home/$USER/javalib
在VI编辑器中,分隔符看起来像' ^ @'并且使用od -c,分隔符为\ 0
答案 0 :(得分:0)
您应该使用\ 000作为分隔符,它会将该字符生成为分隔符。
答案 1 :(得分:0)
在我的sql conn字符串中将字符集设置为UTF 8,可以解决此问题。
mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&useDynamicCharsetInfo=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&useEncoding=true