Как сохранить нулевое значение в OpenCSVSerde или избежать кавычек в LazySimpleSerde в таблице Hive

У меня есть вопрос о TBLProperties в Hive для OpenCSVSerde и SimpleLazySerDe.

Файл данных, хранящийся в текстовом файле (созданный SQOOP)

Свойства таблицы

  1. Сохраненные данные как OpenCSVSerde
  2. separatorChar на |
  3. цитатаChar от "
  4. escapeChar от \\

Проблема в том, что значение null отображается как пустая строка "". Потом я нашел это

Запись столбцов с NULL в виде некоторой строки с использованием OpenCSVSerde - HIVE< /а>

Я пытался следить за этой темой, но есть одна проблема, если канал | хранится в содержимом, тогда столбец будет смещаться.

  1. Создать таблицу OpenCSVServe

CREATE TABLE `opencsv_serde`(   
  `a` string,
  `b` string,
  `c` string
)   
ROW FORMAT SERDE    
  'org.apache.hadoop.hive.serde2.OpenCSVSerde'  
WITH SERDEPROPERTIES (  
  'quoteChar'='\"',     
  'separatorChar'='|',
  'escapeChar'='\\'
)   
STORED AS INPUTFORMAT   
  'org.apache.hadoop.mapred.TextInputFormat'    
OUTPUTFORMAT    
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'  
  1. Создайте таблицу LazySimpleSerDe (думаю, quoteChar не сработает)
CREATE TABLE `lazysimple_serde`(    
  `a` string,
  `b` string,
  `c` string
)   
ROW FORMAT SERDE    
    'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES (  
  'field.delim'='|',    
  'serialization.format'='|',
  'escapeChar'='\\',
  'quoteChar'='\"'
)

STORED AS INPUTFORMAT   
  'org.apache.hadoop.mapred.TextInputFormat'    
OUTPUTFORMAT    
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'  
TBLPROPERTIES('serialization.null.format'='');
  1. Вставьте данные в opencsv_serde
insert into opencsv_serde
select "a|a", "b", '"c|c"' union all
select "d|d", "e", null;
  1. Выберите данные из opencsv_serde результата из opencsv_serde

  2. Вставьте данные с opencsv_serde по lazysimple_serde

insert into lazysimple_serde
select * from opencsv_serde
  1. Проверить результат от lazysimple_serde результат от lazysimple_serde

Обнаружен сдвиг столбца в LazySimpleSerDe

Мне нужно знать, как сохранить null в OpenCSVSerDe или предотвратить сдвиг столбца в LazySimpleSerDe.

Спасибо


person M-Chat Lertvanasirikul    schedule 10.04.2020    source источник