sqoop从rdbms表将数据插入错误的配置单元列

q43xntqr  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(363)

我在sql server中有一个名为“employee”的表:

ID  NAME    ADDRESS   DESIGNATION
1   Jack     XXX       Clerk
2   John     YYY       Engineer

我在配置单元中创建了一个外部表(emp),并通过sqoop import使用sqoop的--query参数将数据从employee导入到配置单元表中。如果我提到--queryas' select * from employee '然后数据被正确地插入到配置单元表中。但是如果我提到--query as' select ID,NAME,DESIGNATION “from employee”则“employee”表(rdbms)的designation列中的数据将插入到“emp”表的address列中,而不是插入到designation列中。当我运行以下配置单元查询时:

select designation from emp;

我得到的值为:null而不是:clerk engineer,但是如果我运行配置单元查询为:

select address from emp;

我得到的值是:clerk engineer而不是:null。任何修复此错误数据的想法都会有很大帮助。我当前使用的是0.11版本的配置单元,因此无法使用0.14版本的配置单元插入查询。

knpiaxh1

knpiaxh11#

sqoop语句将数据导入hdfs目录为(假设字段分隔符为,)

1,Jack,Clerk
2,John,Engineer

所以地址列将有指定数据,指定列将为空
您可以尝试——查询“selectid,name,”,designation from employee”,这应该可以

6l7fqoea

6l7fqoea2#

好的,我给你看一个样品。

sqoop import --connect jdbc:mysql://host:port/db'?useUnicode=true&characterEncoding=utf-8' \
--username 'xxxx' \
--password 'xxxx' \
--table employee \
--columns 'ID,NAME,DESIGNATION' \
--where 'aaa=bbb' \
-m 1 \
--target-dir hdfs://nameservice1/dir \
--fields-terminated-by '\t' \
--hive-import \
--hive-overwrite \
--hive-drop-import-delims \
--null-non-string '\\N' \
--null-string '\\N' \
--hive-table 'hive_db.hive_tb' \
--hive-partition-key 'pt' \
--hive-partition-value '2016-01-20'

一些参数是可选的。
sqoop语法详细信息:http://sqoop.apache.org/docs/1.4.2/sqoopuserguide.html#_literal_sqoop_import_literal

相关问题