Sqoop不会将NULL值导入HBase

问题描述 投票:0回答:1

我有以下命令从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版本。

提前致谢

hbase cloudera sqoop
1个回答
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算子可以解决上述问题。而不是使用*使用列名,并使用COALESCE为SQL字段具有null值的那些列,通过在HBase中存储时指定默认值

例如:

   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, \

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

© www.soinside.com 2019 - 2024. All rights reserved.