我有以下命令从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版本。
提前致谢
答案 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, \
希望这能解决你的问题!!