为什么AWS Athena会将“字符串”数据类型返回到上所有表的字段
“显示创建表”命令或描述表:
例如表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')
答案 0 :(得分:0)
我认为您可能做错了什么,或者在自动生成表时,可能没有正确的格式化数据。
以下是解决您的问题的系统步骤。 假设您的数据采用以下格式。
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/';
希望有帮助!
答案 1 :(得分:0)
这是因为您使用的是CSV SERDE,而不是TEXT Serde。
CSV serde仅支持string
数据类型,因此所有列均为该类型。
来自https://docs.aws.amazon.com/athena/latest/ug/csv.html
OpenCSV SerDe [...]将所有列类型值转换为STRING。
文档概述了一些条件,在这些条件下,表模式可能与所有string
不同(例如,“ ,它会在可以时将值解析为BOOLEAN,BIGINT,INT和DOUBLE数据类型。识别它们”),但显然这对您而言无效。