首次使用查询后更改了AWS Athena csv元数据定界符

时间:2018-06-29 11:05:45

标签: amazon-web-services csv amazon-s3 amazon-athena

我想将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 '|'以及其他许多...

2 个答案:

答案 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' = ','