Sqoop不会将空值导入HBase

Sqoop不会将空值导入HBase,hbase,cloudera,sqoop,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 \$CONDITIO

我有以下从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”

有什么魔法系统的东西我不知道吗

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


提前感谢

空字符串和空非字符串是仅在将数据从SQL导入配置单元时支持的参数,而不是HBase。检查SQOOP文档以进行确认。

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

例如:


希望这能解决你的问题

null string和null non string是仅在将数据从SQL导入配置单元时支持的参数,而不是HBase。检查SQOOP文档以进行确认。

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

例如:


希望这能解决你的问题

谢谢大家!!我希望避免合并,因为有数百张桌子。。不过还是谢谢你,谢谢你!我希望避免合并,因为有数百张桌子。。不过还是谢谢你。
   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, \