我有一个包含以下列的SQL表:
name, fname, e-mail, phone
如何使用Sqoop将此表导入HDFS上的CSV文件:
额外的phone2
列,以便具有以下格式的输出CSV记录:
姓名,姓名,电子邮件,电话,电话2
其中phone2
的所有输出记录的值为udef
。
某些输入记录可能有一个空的e-mail
字段,这会产生包含,,
字段的CSV行,如下所示:
约翰史密斯,, 1234567
如何用,,
字符串替换undef
空字符串?要使CSV包含以下记录:
John,Smith,undef,1234567,undef Tom,Brooks,toom @ abc.com,78979878,undef ... 等
答案 0 :(得分:2)
Sqoop可以接受查询,因此除了指定--null-string和--null-non-string选项之外,您还可以指定要导出的任何旧查询。对您而言,您的查询非常简单:
select name, fname, e-mail, phone, null AS phone2 FROM people
然后你只需将它放在你的sqoop命令中。请注意,您可能需要执行--map-column-java来告诉sqoop您希望列具有哪些数据类型,因为使用自定义查询,它不会是nec。能够搞清楚。
sqoop \
--query 'select name, fname, e-mail, phone, null AS phone2 FROM people'
--null-string UNDEF
--null-non-string UNDEF
... connection info and other options, if nec....
奖励提示:某些数据库可以在启用了--direct选项的情况下超快速导出,因此您可能需要查看该内容,具体取决于您的表格大小。
答案 1 :(得分:1)
据我所知,在将SQL数据导入Sqoop时,无法添加Extra列。
但是可以使用null-string
将空值更改为其他值。例如,
sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--null-string 'UNDEF' \
--null-non-string 'UNDEF'
上面的代码将空值更改为'UNDEF'。