sqoop 将数据从 rdbms table 插入错误的配置单元列
sqoop inserting data into wrong hive column from rdbms table
我在 SQL 服务器中有一个名为 'employee' 的 table 服务器:
ID NAME ADDRESS DESIGNATION
1 Jack XXX Clerk
2 John YYY Engineer
我在 hive 中创建了一个外部 table (emp),并通过 sqoop 导入我使用 sqoop 的 --query 参数将数据从员工导入到 hive table。如果我提到 --query as 'select * from employee
' 然后数据被插入配置单元 table correctly.But 如果我提到 --query as 'select ID,NAME,DESIGNATION
' from employee' 那么数据在'employee' table(rdbms) 的 DESIGNATION 列被插入到 'emp' table 的地址列,而不是插入到名称 column.When I 运行下面的配置单元查询:
select designation from emp;
我得到的值是:
无效的
无效的
代替:文员
工程师
但是如果我 运行 配置单元查询为 :
select address from emp;
我得到的值是:
文员
工程师
而不是:NULL
无效的
任何修复此不正确数据的想法都会很棒 help.I 我目前使用的是 0.11 版本的配置单元,所以我不能使用 0.14 版本的配置单元中可用的配置单元插入查询。
Sqoop语句将数据导入hdfs目录为(假设字段分隔符为,)
1,Jack,Clerk
2,John,Engineer
因此地址列将包含 DESIGNATION 数据并且 DESIGNATION 列将为空
您可以尝试 --query "select ID,NAME,'',DESIGNATION from employee",这应该有效
好的,我给你看一个示例。
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
我在 SQL 服务器中有一个名为 'employee' 的 table 服务器:
ID NAME ADDRESS DESIGNATION
1 Jack XXX Clerk
2 John YYY Engineer
我在 hive 中创建了一个外部 table (emp),并通过 sqoop 导入我使用 sqoop 的 --query 参数将数据从员工导入到 hive table。如果我提到 --query as 'select * from employee
' 然后数据被插入配置单元 table correctly.But 如果我提到 --query as 'select ID,NAME,DESIGNATION
' from employee' 那么数据在'employee' table(rdbms) 的 DESIGNATION 列被插入到 'emp' table 的地址列,而不是插入到名称 column.When I 运行下面的配置单元查询:
select designation from emp;
我得到的值是: 无效的 无效的 代替:文员 工程师 但是如果我 运行 配置单元查询为 :
select address from emp;
我得到的值是: 文员 工程师 而不是:NULL 无效的 任何修复此不正确数据的想法都会很棒 help.I 我目前使用的是 0.11 版本的配置单元,所以我不能使用 0.14 版本的配置单元中可用的配置单元插入查询。
Sqoop语句将数据导入hdfs目录为(假设字段分隔符为,)
1,Jack,Clerk
2,John,Engineer
因此地址列将包含 DESIGNATION 数据并且 DESIGNATION 列将为空
您可以尝试 --query "select ID,NAME,'',DESIGNATION from employee",这应该有效
好的,我给你看一个示例。
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