Почему все столбцы создаются как строки, когда я использую OpenCSVSerde в Hive? - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь создать таблицу, используя OpenCSVSerde и некоторые столбцы целых чисел и даты.Но столбцы преобразуются в строку.Это ожидаемый результат?В качестве обходного пути я выполняю явное приведение типов после этого шага (что делает полный запуск медленным)

hive> create external table if not exists response(response_id int,lead_id int,creat_date date ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ('quoteChar' = '"', 'separatorChar' = '\,', 'serialization.encoding'='UTF-8', 'escapeChar' = '~')   location '/prod/hive/db/response' TBLPROPERTIES ("serialization.null.format"="");
OK
Time taken: 0.396 seconds
hive> describe formatted response;
OK
# col_name              data_type               comment

response_id             string                  from deserializer
lead_id                 string                  from deserializer
creat_date              string                  from deserializer

Исходный код , который объясняет изменение типа данных на String.

1 Ответ

0 голосов
/ 24 апреля 2018

Это известное ограничение CSVSerDe serde. CSVSerDe обрабатывает все столбцы типа String. Даже если вы создадите таблицу с нестроковыми типами столбцов, используя этот SerDe, вывод DESCRIBE TABLE будет показывать тип строкового столбца. Информация о типе извлекается из SerDe. Чтобы преобразовать столбцы в таблицу нужного типа, вы можете создать представление над таблицей, которое выполняет CAST для нужного типа.

См. Здесь: CSVSerde Это слияние относится к CSVSerDe, но использует Open-CSV

Также см. Здесь: https://docs.aws.amazon.com/athena/latest/ug/csv.html

А здесь: Улей "OpenCSVSerde" меняет определение вашей таблицы

...