Sqoop不会将空值导入HBase
我有以下从Oracle导入到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
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, \