Sqoop 不向 HBase 导入 NULL 值

Sqoop does not import NULL values to HBase

我有以下从 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 应该将它们分别转换为 "empty string" 和“0”。

有什么神奇的系统吗属性我不见了?

我的Sqoop版本是1.4.6-cdh5.10.1.

提前致谢

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运算符解决上述问题。而不是使用 * 使用列名,并在 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, \

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