我有一个CSV文件(带有AWS帐单信息),每个字段都以字符串形式存储在引号中,例如:"value"
因此,示例行的一部分如下所示:
"234234324223532","First 3 Dashboards per month are free.","2018-08-01 00:00:00","2018-08-01 01:00:00","0.0026881720"
当我如下定义新表时:
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable (
Id INT,
Desc STRING,
StartTime TIMESTAMP,
EndTime TIMESTAMP,
Cost DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://MYBUCKET/FOLDER/'
我只能在Desc
的结果中看到Select * from mydb.mytable
的值
是否可以在create table
语句中定义一些转换器?
还是我需要从源文件中删除大多数引号("
)?这是非常不可取的。
答案 0 :(得分:2)
您遇到的问题是Athena正在将所有内容视为字符串。如果将所有列定义为字符串,则应该能够看到所有内容。
您可以尝试使用Serde,在其中可以定义引号char,以便可以接受数据类型:
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable (
Id INT,
Desc STRING,
StartTime TIMESTAMP,
EndTime TIMESTAMP,
Cost DOUBLE
)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'=',')
LOCATION 's3://MYBUCKET/FOLDER/'
我希望这会有所帮助。