Как сохранить нулевое значение в OpenCSVSerde или не использовать кавычки в LazySimpleSerde в таблице Hive - PullRequest
0 голосов
/ 10 апреля 2020

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

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

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

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

проблема в null значение отображается в виде пустой строки "". Затем я обнаружил, что

Запись столбцов, имеющих NULL в качестве некоторой строки, с использованием OpenCSVSerde - HIVE

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

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

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'  
Создать таблицу 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'='');
Вставить данные в opencsv_serde
insert into opencsv_serde
select "a|a", "b", '"c|c"' union all
select "d|d", "e", null;

Выберите данные из opencsv_serde результат opencsv_serde

Вставьте данные из opencsv_serde в lazysimple_serde

insert into lazysimple_serde
select * from opencsv_serde
Результат проверки lazysimple_serde Результат lazysimple_serde

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

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

Спасибо

...