我想将s3 csv文件查询到雅典娜。 源CSV文件描述:(分隔符“ |”)
system information
val1|val2|val3|val4|val5|
基于此,我在雅典娜中创建表格:
Create external table dbname.fromcsv
(
col1 string,
col2 string,
col3 string,
col4 string,
col5 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = '|')
LOCATION
's3://mybucketloc/folder/'
TBLPROPERTIES ("skip.header.line.count"='1');
创建表并查询athena之后,一切看起来都很好,数据被很好地分隔开等等。
第一个查询结果:
col1 col2 col3 col4 col5
val1 val2 val3 val4 val5
对同一张表的下一个查询返回的值是存储在一列中的','分隔符...
col1 col2 col3 col4 col5
val1,val1,val,val4,val5
然后在我的s3存储桶中添加.csv.metadata
如何处理这种情况?我不想每次删除.csv.metadata文件吗?有没有办法保留原始的创建表定义?
我试图将create table更改为ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
以及其他许多...
答案 0 :(得分:1)
我相信您的s3:// mybucketloc / folder /与雅典娜查询结果存储区相同。此存储桶是由Athena创建的,用于存储.csv.metadata等文件,并且仅供内部使用,因此,您将.csv.metadata文件与csv文件放在同一个存储桶中。
最简单的解决方案是将csv文件放在不同的s3存储桶中,而不是在athena-query-results存储桶中。
答案 1 :(得分:0)
更改此:
'serialization.format' = ';',
'field.delim' = ';'
针对:
'serialization.format' = ',',
'field.delim' = ','