У меня есть вопрос о TBLProperties в Hive для OpenCSVSerde и SimpleLazySerDe.
Файл данных хранится в текстовом файле (создан SQ OOP)
Свойства таблицы
- Сохраненные данные как OpenCSVSerde
- separatorChar от
|
- quoteChar от
"
- escapeChar от
\\
проблема в null
значение отображается в виде пустой строки ""
. Затем я обнаружил, что
Запись столбцов, имеющих NULL в качестве некоторой строки, с использованием OpenCSVSerde - HIVE
Я пытался следить за этим топи c, но получил одну проблему если труба |
сохранена в содержимом, столбец будет смещен.
- Создать таблицу 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
Спасибо