Sqoop不会将NULL值导入HBase

时间:2017-11-09 14:58:29

标签: hbase cloudera sqoop

我有以下命令从Oracle导入到Hbase:

sqoop-import 
-Dsqoop.hbase.add.row.key=true 
-Dhbase.zookeeper.quorum=zk.localdomain 
--verbose 
--connect jdbc:oracle:thin:@127.0.0.1:1521:xe 
--username admin 
--password admin 
--query "select * from table WHERE \$CONDITIONS" 
--hbase-table hbase_table 
--column-family data 
--hbase-row-key ID 
--hbase-create-table 
--target-dir /user/sqoop/tmp_hbase_table 
--null-string 'empty string' 
--null-non-string '0' 
--split-by ID
-m 1

代码工作正常,但没有将导入NULL的列导入HBase。

我理解HBase不接受空值,但如果我理解正确的文档,Sqoop应该将它们转换为"空字符串"和" 0"分别

我是否遗失了一些神奇的系统属性?

我在1.4.6-cdh5.10.1中的Sqoop版本。

提前致谢

1 个答案:

答案 0 :(得分:2)

null-string和null-non-string是仅在将数据从SQL导入Hive而不是HBase时支持的参数。检查SQOOP文档以确认。 https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_importing_data_into_hive https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_importing_data_into_hbase

因此可以使用COALESCE运算符解决上述问题。而不是使用*使用列名,并通过在HBase中存储时指定默认值,将COALESCE用于SQL字段具有null值的列

例如:

   COALESCE(user_name,'xyz') as user_name, \
   COALESCE(password,'123') as password, \
   COALESCE(created_date, '9999-12-31 00:00:00.0000000') as created_date, \
   COALESCE(modified_date,'9999-12-31 00:00:00.0000000') as modified_date, \
   COALESCE(last_login_date,'9999-12-31 00:00:00.0000000') as lastlogin, \
   COALESCE(email_id,'0') as email_id, \

希望这能解决你的问题!!