【问题标题】:Export HDFS file with custom delimiter into Mysql via Sqoop通过 Sqoop 将带有自定义分隔符的 HDFS 文件导出到 Mysql
【发布时间】:2017-07-04 21:06:12
【问题描述】:
  • 我有这样的文件:

    1^%~binod^*~1^%~ritesh^*~1^%~shisir^*~1^%~budhdha^*~1^%~romika^*~1^%~rubeena^*~
    
  • 在哪里 --input-fields-terminated-by '^%~' --input-lines-terminated-by '^*~'。

  • 我尝试通过命令导出:

    sqoop export --connect jdbc:mysql://localhost/sqoop --username root -P --table makalu --export-dir sqoop/makalu --input-fields-terminated-by '^%~' --input-lines-terminated-by '^*~'
    
  • 但它写了一行:

身份证|姓名 1|%~比诺德

在 MySQL 中。

  • 现在我的问题是解决这种情况的命令是什么。

【问题讨论】:

    标签: mysql hadoop hdfs sqoop


    【解决方案1】:

    参数 --input-fields-terminated-by--input-lines-terminated-by 接受单个字符

    当您在终端中执行导出命令时,您会看到以下警告

    02/03 18:55:21 WARN sqoop.SqoopOptions: Character argument ^%~ has multiple characters; only the first will be used.
    15/02/03 18:55:21 WARN sqoop.SqoopOptions: Character argument ^*~ has multiple characters; only the first will be used.
    

    更新:

    我观察到的一件事是,如果行被终止而不是 \n 或新行,那么它只会在您导出时将一条记录插入数据库。我尝试了字段和行终止的组合,但只有在行以 \n 终止的情况下,数据才会导出到 RDBMS 表中

    甚至尝试使用 --input-lines-terminated-by--lines-terminated-by 参数,但没有成功。

    我已经测试过了

    Cloudera CDH-5.0.0-1
    Sqoop version: 1.4.4-cdh5.0.0
    

    我唯一能找到的是this

    【讨论】:

    • 即使在我输入的情况下: 1%binod^1%ritesh^1%shisir^1%budhdha^1%romika^1%rubeena^ 和命令: sqoop export --connect jdbc:mysql ://localhost/sqoop --username root -P --table makalu --export-dir sqoop/makalu --input-fields-terminated-by '%' --input-lines-terminated-by '^' 显示错误:原因:java.lang.RuntimeException:无法解析输入数据:'null'和输出:id|name 1|binod 在 MySQL 中。现在导出所有这些数据的解决方案是什么。
    【解决方案2】:

    参数 --input-fields-terminated-by 'any delimiter in single quotes' 有效。在这种情况下也不要使用 --direct ,因为它会覆盖分隔符。 显然,您需要在 mysql 中创建一个默认分隔符为 ',' 的表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-08
      • 2014-08-17
      • 2013-08-16
      • 2017-12-16
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多