sqoop:使用八进制值(\0)作为分隔符

gopyfrb3  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(469)

因为我在其中一个字段中有特殊的字符,所以我想使用较低的值作为分隔符。配置单元使用分隔符(\0)可以正常工作,但是sqoop失败,没有uchelement异常。似乎没有将分隔符检测为\0。
这就是我的配置单元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

lndjwyie

lndjwyie1#

在可以解决此问题的mysqlconn字符串中将字符集设置为utf8。

mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&useDynamicCharsetInfo=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&useEncoding=true
a0x5cqrl

a0x5cqrl2#

您应该使用\000作为分隔符,它将生成该字符作为分隔符。

相关问题