У меня есть вопрос о TBLProperties в Hive для OpenCSVSerde и SimpleLazySerDe.
Файл данных, хранящийся в текстовом файле (созданный SQOOP)
Свойства таблицы
- Сохраненные данные как OpenCSVSerde
- separatorChar на
|
- цитатаChar от
"
- escapeChar от
\\
Проблема в том, что значение null
отображается как пустая строка ""
. Потом я нашел это
Запись столбцов с NULL в виде некоторой строки с использованием OpenCSVSerde - HIVE< /а>
Я пытался следить за этой темой, но есть одна проблема, если канал |
хранится в содержимом, тогда столбец будет смещаться.
- Создать таблицу 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'
- Создайте таблицу 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
Мне нужно знать, как сохранить null в OpenCSVSerDe или предотвратить сдвиг столбца в LazySimpleSerDe.
Спасибо