我创建了将数据从ms sql导入hive的sqoop进程,但是“char”类型的字段有问题。sqoop导入代码:
sqoop import \
--create-hcatalog-table \
--connect "connection_parameters" \
--username USER \
--driver net.sourceforge.jtds.jdbc.Driver \
--null-string '' \
--null-non-string '' \
--class-name TABLE_X \
--hcatalog-table TABLE_X_TEST \
--hcatalog-database default \
--hcatalog-storage-stanza "stored as orc tblproperties ('orc.compress'='SNAPPY')" \
--map-column-hive "column_1=char(10),column_2=char(35)" \
--num-mappers 1 \
--query "select top 10 "column_1", "column_2" from TABLE_X where \$CONDITIONS" \
--outdir "/tmp"
column_1
哪种类型
char(10)
如果没有数据,则应为空。但是蜂巢用10个空格填满了整个区域。
column_2
哪种类型
char(35)
也应该为空,但有35个空格。
这是一个很大的问题,因为我不能像这样运行查询:
select count(*) from TABLE_X_TEST where column_1 is NULL and column_2 is NULL;
但我必须用这个:
select count(*) from TABLE_X_TEST where column_1 = ' ' and column_2 = ' ';
我尝试更改查询参数并使用trim函数:
--query "select top 10 rtrim(ltrim("column_1")), rtrim(ltrim("column_2")) from TABLE_X where \$CONDITIONS"
但它不起作用,所以我想这不是源的问题,而是蜂巢的问题。
如何防止hive在空字段中插入空格?