我有一个蜂巢查询:
insert override directory /x
select ...然后我尝试用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'但是,这似乎不能按照分隔符解析字段,我遗漏了什么?我认为--输入字段--终止于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)
...输出的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发布于 2013-11-03 22:16:10
我在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'问题在于正确的分隔符识别(与类型和模式无关),这是由hive_char实现的。
在linux中将这个特殊字符编码到命令行的另一种可能性是键入Cntr+V+A。
发布于 2015-03-01 23:53:28
使用
--input-fields-terminated-by '\001' --lines-terminated-by '\n'因为sqoop导出命令中的标志似乎对我起了作用。
因此,在您的示例中,完整的命令是:
sqoop export --connect jdbc:mysql://mysqlm/site --username site --password site --table x_data --export-dir /x --input-fields-terminated-by '\001' --lines-terminated-by '\n'发布于 2013-09-28 13:50:04
我认为这是因为DataType与关系数据库管理系统模式不匹配。
尝试找到"9-2“值的列名,并检查RDBMS架构中的数据类型。
如果它的int或数值,则Sqoop将解析该值并插入。看起来"9-2“不是数值。
如果这不管用请告诉我。
https://stackoverflow.com/questions/18978591
复制相似问题