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

AWS Athena csv metadata delimiter changed after first query use

我想查询 s3 csv 文件到 athena。 源 csv 文件描述:(分隔符“|”)

system information
val1|val2|val3|val4|val5|   

基于我在 athena 中创建 table:

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');

创建 table 并查询 athena 后一切看起来都很好,数据分离得很好等

第一个查询结果:

col1 col2  col3   col4 col5
val1 val2  val3   val4 val5

针对同一 table 的下一个查询返回的值带有存储在一列中的“,”分隔符...

col1                     col2  col3   col4  col5
val1,val1,val,val4,val5   

然后在我的 s3 存储桶中添加了其他文件。csv.metadata

这种情况怎么处理?我不想每次都删除 .csv.metadata 文件?有没有办法保留原来的 create table 定义? 我尝试将 create table 更改为 ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 和许多其他...

我相信您的 s3://mybucketloc/folder/ 与 athena 查询结果存储桶相同。此存储桶由 Athena 创建,用于存储 .csv.metadata 等文件,供其内部使用,因此您的 .csv.metadata 文件与 csv 文件位于同一存储桶中。

最简单的解决方案可能是,将您的 csv 文件放在不同的 s3 存储桶中,而不是放在 athena-query-results 存储桶中。

改变这个:

 'serialization.format' = ';',                                                     
  'field.delim' = ';'

用于:

 'serialization.format' = ',',                                                     
  'field.delim' = ','