【发布时间】:2018-04-06 08:54:53
【问题描述】:
我的要求是通过 sqoop (1.4.6) 以 avro 格式将数据从 RDBMS 加载到 HDFS(由 CDH 5.9.X 支持),然后使用外部 hive(1.1) 表来查询数据。 不幸的是,RDBMS 中的数据有一些换行符。
我们都知道 hive 无法解析数据中的换行符,通过 hive 选择整个数据时,数据映射失败。但是,hive 的 select count(*) 工作正常。
我在 sqoop 导入期间使用了以下选项并检查过,但没有用:
--hive-drop-import-delims
--hive-delims-replacement
以上选项适用于文本格式。但是以文本格式存储数据对我来说不是一个可行的选择。 上述选项在 Sqoop 生成(codegen)POJO 类的 toString 方法中正确转换(显然文本格式按预期工作),所以我觉得在 avro 导入期间根本没有使用此方法。可能是因为 avro 处理换行符没有问题,就像 hive 一样。
我很惊讶,没有人会遇到这种常见的情况,一个有备注的表格,评论字段很容易出现这个问题。
谁能给我建议一个解决方案?
我的命令:
sqoop import \
-Dmapred.job.queue.name=XXXX \
--connect jdbc:oracle:thin:@Masked:61901/AgainMasked \
--table masked.masked \
--username masked \
--P \
--target-dir /user/masked/ \
--as-avrodatafile \
--map-column-java CREATED=String,LAST_UPD=String,END_DT=String,INFO_RECORD_DT=String,START_DT=String,DB_LAST_UPD=String,ADDR_LINE_3=String\
--hive-delims-replacement ' '
--null-string '\\N'
--null-non-string '\\N'
--fields-terminated-by '\001'
-m 1
【问题讨论】:
-
您正在使用 bit hive 导入和 HDFS 导入的组合。对于 Hive 导入,您应该使用命令
--hive-import --hive-drop-import-delims --map-column-hive