通过Sqoop将带有自定义分隔符的HDFS文件导出到Mysql中

时间:2015-02-03 12:21:07

标签: mysql hadoop hdfs sqoop

  • 我的文件是这样的:

    1^%~binod^*~1^%~ritesh^*~1^%~shisir^*~1^%~budhdha^*~1^%~romika^*~1^%~rubeena^*~
    
  • 其中--input-fields-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 '^*~'
    
  • 但它写了一行:

id|name
1|%~binod
在MySQL中

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

2 个答案:

答案 0 :(得分:4)

参数 - 输入字段已终止 - 输入行终止接受单个字符

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

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表中

甚至尝试使用 - 输入行终止 - 行终止参数,但没有运气。

我在

上测试了这个
Cloudera CDH-5.0.0-1
Sqoop version: 1.4.4-cdh5.0.0

我能找到的只有this

答案 1 :(得分:0)

参数--input-fields-terminated-by'单引号中的任何分隔符'作品。在这种情况下也不要使用--direct,因为它会覆盖分隔符。 显然你需要一个在mysql中创建的表,其默认分隔为','