Hive 在配置单元中将空白转换为空

Hive 在配置单元中将空白转换为空,hive,impala,Hive,Impala,我试图通过设置属性'serialization.NULL.format'=''将源文件中的空值转换为配置单元表中的空值。我在hive中编写的查询是: create table test(a int, b string) stored as parquet TBLPROPERTIES('serialization.null.format'=''); 然后通过impala将值插入其中,如下所示: insert overwrite table test values (1, ''), (2, 'b'

我试图通过设置属性
'serialization.NULL.format'=''
将源文件中的空值转换为配置单元表中的空值。我在hive中编写的查询是:

create table test(a int, b string) stored as parquet TBLPROPERTIES('serialization.null.format'='');
然后通过impala将值插入其中,如下所示:

insert overwrite table test values (1, ''), (2, 'b');
| a | b |


| 1 |   |

| 2 | b |
CASE    
when TRIM(a) = ''
THEN NULL
ELSE a
END,
结果如下所示:

insert overwrite table test values (1, ''), (2, 'b');
| a | b |


| 1 |   |

| 2 | b |
CASE    
when TRIM(a) = ''
THEN NULL
ELSE a
END,

有人能帮我解释一下为什么空白不是转换成空的吗?< /P> < P >问题是木地板的问题。见上的问题

说明如下:

create table src (a string);
insert into table src values (NULL), (''), ('');

0: jdbc:hive2://localhost:10000/default> select * from src;
+-----------+--+
| src.a  |
+-----------+--+
| NULL      |
|                |
|                |
+-----------+--+

create table dest (a string) row format serde 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' stored as INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat';

alter table dest set SERDEPROPERTIES ('serialization.null.format' = '');
alter table dest set TBLPROPERTIES ('serialization.null.format' = '');
insert overwrite table dest select * from src;

0: jdbc:hive2://localhost:10000/default> select * from test11;
+-----------+--+
| test11.a  |
+-----------+--+
| NULL      |
|                |
|                |
+-----------+--+

您可以尝试使用以下语句插入到表中:

insert overwrite table test values (1, ''), (2, 'b');
| a | b |


| 1 |   |

| 2 | b |
CASE    
when TRIM(a) = ''
THEN NULL
ELSE a
END,

这将实现以下功能:nullif(修剪(b),“”) 为空时将给出b或NULL值。因此,在选择语句时,您可以执行以下操作

从测试中选择a、nullif(微调(b),“”)

FYR:nullif(值1,值2)如果值1=值2,则返回NULL;否则返回值1(从Hive 2.3.0开始)。 简写为:当值1=值2时为空,否则为值1

干杯