如何使用sqoop导出默认的hive分隔输出?

Jul*_*ias 10 hadoop hive sqoop

我有一个配置单元查询:

insert override directory /x
select ...
Run Code Online (Sandbox Code Playgroud)

然后我尝试用sqoop导出数据

sqoop export --connect jdbc:mysql://mysqlm/site --username site --password site --table x_data --export-dir /x  --input-fields-terminated-by 0x01 --lines-terminated-by '\n'
Run Code Online (Sandbox Code Playgroud)

但这似乎无法根据分隔符解析字段我错过了什么?我认为--input-fields-terminated-by 0x01部分不能按预期工作?

我不想在包含查询结果的配置单元中创建其他表.

堆栈跟踪:

 2013-09-24 05:39:21,705 ERROR org.apache.sqoop.mapreduce.TextExportMapper: Exception: 
 java.lang.NumberFormatException: For input string: "9-2"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:458)
 ...
Run Code Online (Sandbox Code Playgroud)

输出的vi视图

16-09-2013 23^A1182^A-1^APub_X^A21782^AIT^A1^A0^A0^A0^A0^A0.0^A0.0^A0.0
16-09-2013 23^A1182^A6975^ASoMo Audience  Corp^A2336143^AUS^A1^A1^A0^A0^A0^A0.2^A0.0^A0.0
16-09-2013 23^A1183^A-1^APub_UK, Inc.^A1564001^AGB^A1^A0^A0^A0^A0^A0.0^A0.0^A0.0
17-09-2013 00^A1120^A-1^APub_US^A911^A--^A181^A0^A0^A0^A0^A0.0^A0.0^A0.0
Run Code Online (Sandbox Code Playgroud)

Jul*_*ias 11

我在bash中找到了这个特殊字符的正确解决方案

#!/bin/bash

# ... your script
hive_char=$( printf "\x01" )

sqoop export --connect jdbc:mysql://mysqlm/site --username site --password site --table x_data --export-dir /x  --input-fields-terminated-by ${hive_char} --lines-terminated-by '\n'
Run Code Online (Sandbox Code Playgroud)

问题在于正确的分隔符识别(与类型和模式无关),这是由hive_char实现的.

将这个特殊字符在linux中编码为命令行的另一种可能性是键入Cntr + V + A.

  • 你也可以简单地用^ A'\ 001'的八进制表示.sqoop export --connect jdbc:mysql:// mysqlm/site --username site --password site --table x_data --export-dir/x --input-fields-terminated-by'\001' - lines-终止于'\n' (4认同)