sqoop不会将空值导入hbase

ql3eal8s  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(377)

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

代码工作正常,但带有空值的列不会导入到hbase。
我知道hbase不接受空值,但如果我正确理解文档,sqoop应该分别将它们转换为“空字符串”和“0”。
有什么神奇的系统属性我不知道吗?
我的sqoop版本是1.4.6-cdh5.10.1。
提前谢谢

hujrc8aj

hujrc8aj1#

null string和null non string仅在将数据从sql导入配置单元时才受支持,而对于hbase则不受支持。检查sqoop文档以确认。https://sqoop.apache.org/docs/1.4.6/sqoopuserguide.html#_importing_data_into_hivehttps用法://sqoop.apache.org/docs/1.4.6/sqoopuserguide.html##将数据导入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, \

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

相关问题