我有一张名为'员工'在SQL Server中:
ID NAME ADDRESS DESIGNATION
1 Jack XXX Clerk
2 John YYY Engineer
我在hive中创建了一个外部表(emp),并通过sqoop导入我使用sqoop的--query参数将数据从employee导入到hive表。如果我提到--query as' select * from employee
'然后数据正确地插入到hive表中。但是如果我提到--query为' select ID,NAME,DESIGNATION
'来自员工'那么'员工'的DESIGNATION栏中的数据table(rdbms)正被插入到' emp'的地址栏中。表而不是插入指定列。当我运行以下配置单元查询时:
select designation from emp;
我得到的价值是: 空值 空值 而不是:职员 工程师 但是,如果我将hive查询运行为:
select address from emp;
我得到的价值是: 书记 工程师 而不是:NULL 空值 修复这些不正确数据的任何想法都会有很大帮助。我目前正在使用0.11版本的配置单元,因此我无法使用0.14 hive版本提供的配置单元插入查询。
答案 0 :(得分:0)
Sqoop语句将数据导入到hdfs目录中(假设字段分隔符为,)
1,Jack,Clerk
2,John,Engineer
因此,地址列将具有DESIGNATION数据,而DESIGNATION列将为空
您可以尝试 - 查询“从员工中选择ID,NAME,',DESIGNATION”,这应该可行
答案 1 :(得分:0)
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