2016-04-01 3 views
3

Я пытаюсь преобразовать пустые значения в исходный файл в NULL в таблице улей, установив свойство 'serialization.null.format' = ''. Запрос я написал в улье:Преобразование пустого в NULL в куст

create table test(a int, b string) stored as parquet TBLPROPERTIES('serialization.null.format'=''); 

А затем вставить значения в это через импала что-то вроде этого:

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

Результат этого показывает что-то вроде этого:

| a | b | 


| 1 | | 

| 2 | b | 

Может ли кто-нибудь помочь мне узнать, почему пустая строка не преобразуется в NULL?

ответ

1

Проблема заключается в паркете SerDe. См. Выпуск на https://issues.apache.org/jira/browse/HIVE-12362.

Описание выглядит следующим образом:

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  | 
|    | 
|    | 
+-----------+--+ 
0

Вы могли бы попытаться вставить в таблицу, используя такое заявление:

CASE  
when TRIM(a) = '' 
THEN NULL 
ELSE a 
END, 
Смежные вопросы