我有以下命令从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版本。
提前感谢
发布于 2017-12-19 10:29:28
只有将数据从SQL导入到Hive而不是HBase时才支持空字符串和空-非字符串。检查SQOOP文档以获得确认。hive hbase
因此,利用COALESCE算子可以解决上述问题。不要使用*,而是对那些SQL字段具有null值的列使用列名和COALESCE,方法是在存储在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, \希望这能解决你的问题!!
https://stackoverflow.com/questions/47205013
复制相似问题