与HCatalog导入一起使用的Sqoop在使用Oracle运行Apache Sqoop时,即使在命令中使用了--hive-drop-import-delims选项,也无法从列数据中删除新行(\ n)。
Sqoop查询:
sqoop import --connect jdbc:oracle:thin:@ORA_IP:ORA_PORT:ORA_SID \
--username user123 --password passwd123 -table SCHEMA.TBL_2 \
--hcatalog-table tbl2 --hcatalog-database testdb --num-mappers 1 \
--split-by SOME_ID --columns col1,col2,col3,col4 --hive-drop-import-delims \
--outdir /tmp/temp_table_loc --class-name "SqoopWithHCAT" \
--null-string ""
Oracle专栏 col4 中的数据如下:(数据具有控制字符,例如^ M)
<li>Details:^M
<ul>^M
<li>
Control字符会导致此问题吗?
我错过了什么吗?这个问题有解决方法或解决方案吗?
答案 0 :(得分:9)
使用--map-column-java
选项明确声明列的类型为String
。然后--hive-drop-import-delims
按预期工作(从数据中删除\n
)。
更改了Sqoop命令:
sqoop import --connect jdbc:oracle:thin:@ORA_IP:ORA_PORT:ORA_SID \
--username user123 --password passwd123 -table SCHEMA.TBL_2 \
--hcatalog-table tbl2 --hcatalog-database testdb --num-mappers 1 \
--split-by SOME_ID --columns col1,col2,col3,col4 --hive-drop-import-delims \
--outdir /tmp/temp_table_loc --class-name "SqoopWithHCAT" \
--null-string "" --map-column-java col4=String
答案 1 :(得分:5)
sqoop import \
--connect jdbc:oracle:thin:@ORA_IP:ORA_PORT:ORA_SID \
--username 123 \
--password 123 \
--table SCHEMA.TBL_2 \
--hcatalog-table tbl2 --hcatalog-database testdb --num-mappers 1 \
--split-by SOME_ID --columns col1,col2,col3,col4 \
--hive-delims-replacement "anything" \
--outdir /tmp/temp_table_loc --class-name "SqoopWithHCAT" \
--null-string ""
你可以尝试这个--hive-delims-replacement“任何”这将替换所有\ n,\ t和\ 01字符 你提供的字符串(在这种情况下用字符串“any”替换)。
答案 2 :(得分:0)
在官方网站上: https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html
如果数据库的行中包含具有Hive默认行定界符(\ n和\ r字符)或列定界符(\ 01字符)的字符串字段,则Hive在使用Sqoop导入的数据时会遇到问题。您可以使用--hive-drop-import-delims选项在导入时删除这些字符,以提供与Hive兼容的文本数据。或者,您可以使用--hive-delims-replacement选项在导入时用用户定义的字符串替换这些字符,以提供与Hive兼容的文本数据。仅当您使用Hive的默认定界符时,才应使用这些选项;如果指定了不同的定界符,则应不使用这些选项。