Почему AWS Athena возвращает тип данных "string" во все поля таблицы с помощью команды "show create table" или описания таблиц - PullRequest
0 голосов
/ 30 июня 2019

Почему AWS Athena возвращает тип данных "string" во все поля таблицы на Команда "Показать создание таблицы" или таблицы описания: например таблица t_mus_albums:

albumid (bigint)
title (string)
artistid (bigint)

чем работает show create table t_mus_albums; Я получаю:

CREATE EXTERNAL TABLE `t_mus_albums`(
  `albumid` string COMMENT 'from deserializer', 
  `title` string COMMENT 'from deserializer', 
  `artistid` string COMMENT 'from deserializer')

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Это потому, что вы используете CSV serde, а не, например, TEXT serde.Serve CSV поддерживает только тип данных string, поэтому все столбцы относятся к этому типу.

С https://docs.aws.amazon.com/athena/latest/ug/csv.html

OpenCSV SerDe [...] преобразует все типы столбцовзначения в STRING.

В документации изложены некоторые условия, при которых схема таблицы может отличаться от всех string s (" Например, она анализирует значения в BOOLEAN, BIGINT, INTи ДВОЙНЫЕ типы данных, когда он может их различить"), но, по-видимому, это неэффективно в вашем случае.

0 голосов
/ 01 июля 2019

Я думаю, что вы, возможно, что-то делаете не так, или при автоматическом создании таблицы у вас могут отсутствовать правильные отформатированные данные.

Вот систематические шаги для решения вашей проблемы. Предположим, что ваши данные в формате ниже.

ID,Code,City,State
41,5,"Youngstown", OH
42,52,"Yankton", SD
46,35,"Yakima", WA
42,16,"Worcester", MA
43,37,"Wisconsin Dells", WI
36,5,"Winston-Salem", NC

Тогда ваша таблица создания будет выглядеть примерно так:

CREATE EXTERNAL TABLE IF NOT EXISTS example.tbl_datatype (
  `id` int,
  `code` int,
  `city` string,
  `state` string 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
) LOCATION 's3://example-bucket/location/a/'
TBLPROPERTIES ('has_encrypted_data'='false');

Затем запустите запрос для описания таблицы.

SHOW CREATE TABLE tbl_datatype;

Это выдаст вам что-то вроде ниже.

CREATE EXTERNAL TABLE `tbl_datatype`(
  `id` int, 
  `code` int, 
  `city` string, 
  `state` string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://example-bucket/location/a/';

Надеюсь, это поможет!

...