hive-drop-import-delims在Sqoop中使用HCatalog时不删除换行符

Sur*_*yak 5 oracle hadoop hive sqoop hcatalog

当与Oracle运行Apache Sqoop时,即使在命令中使用--hive-drop-import-delims选项后,与HCatalog导入一起使用的Sqoop也无法从列数据中删除新行(\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 ""
Run Code Online (Sandbox Code Playgroud)

Oracle Column col4中的数据如下:(数据具有控制字符,例如^ M)

<li>Details:^M
    <ul>^M
        <li>
Run Code Online (Sandbox Code Playgroud)

Control字符会导致此问题吗?

我错过了什么吗?针对此问题是否有解决方法或解决方案?

Sur*_*yak 10

使用--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
Run Code Online (Sandbox Code Playgroud)


bun*_*nty 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 ""
Run Code Online (Sandbox Code Playgroud)

你可以尝试这个--hive-delims-replacement"任何"这将用你提供的字符串替换所有\n,\ t和\ 01字符(在这种情况下用字符串"any"替换).

  • -hive-delims-replacement"null"和--hive-drop-import-delims都不起作用 - 直到map-column-java col4 =添加了字符串.这意味着您希望delims切换到哪个列工作,它必须是java String类型. (2认同)
  • 如果我需要将数据转储到HDFS中,该怎么做? (2认同)