Amazon web services 如何避免AWS Athena CTAS查询创建小文件?

Amazon web services 如何避免AWS Athena CTAS查询创建小文件?,amazon-web-services,amazon-athena,Amazon Web Services,Amazon Athena,我无法找出我的CTAS查询有什么问题,它将数据分解成更小的文件,同时存储在分区中,即使我没有提到任何bucketing列。有没有办法避免这些小文件,并将每个分区存储为一个文件,因为小于128 MB的文件会导致额外的开销 创建表格sampledb.yellow\u trip\u data\u拼花地板 与( 格式='拼花' 拼花地板压缩='GZIP', 外部_location='s3://mybucket/Athena/tables/parquet/' 分区单位=数组['year','month']

我无法找出我的CTAS查询有什么问题,它将数据分解成更小的文件,同时存储在分区中,即使我没有提到任何bucketing列。有没有办法避免这些小文件,并将每个分区存储为一个文件,因为小于128 MB的文件会导致额外的开销

创建表格sampledb.yellow\u trip\u data\u拼花地板
与(
格式='拼花'
拼花地板压缩='GZIP',
外部_location='s3://mybucket/Athena/tables/parquet/'
分区单位=数组['year','month']
)
作为选择
文多里德,
tpep_皮卡_日期时间,
tpep_衰减_日期时间,
乘客人数,,
行程距离,
RatecodeID,
商店标志和前进标志,
PULocationID,
DOLocationID,
付款类型:,
车费金额,
额外的,
mta_税,
小费金额,
收费额,
改善工程附加费,
总金额,
日期格式(日期解析(tpep提取日期时间,%Y-%c-%d%k:%i:%s'),“%Y”)为年份,
日期格式(日期解析(tpep提取日期时间,%Y-%c-%d%k:%i:%s'),“%c”)为月份
来自sampleDB.yellow\u trip\u data\u raw;

雅典娜是一个分布式系统,它将通过一些不可观察的机制扩展查询的执行。看起来它决定为您的CTAS查询使用五个worker,这将在每个分区中生成五个文件


您可以尝试显式指定一个bucket大小,但如果我没记错的话,您可能仍然会得到多个文件。

我通过创建bucketing列
month\u a
解决了这个问题。下面是代码

创建表sampledb.yellow\u trip\u data\u avro
与(
格式='AVRO',
外部_location='s3://a4189e1npss3001/Athena/internal_tables/avro/',
分区单位=数组['year','month'],
bucketed_by=数组['month_a'],
桶数=12
)作为选择
文多里德,
tpep_皮卡_日期时间,
tpep_衰减_日期时间,
乘客人数,,
行程距离,
RatecodeID,
商店标志和前进标志,
PULocationID,
DOLocationID,
付款类型:,
车费金额,
额外的,
mta_税,
小费金额,
收费额,
改善工程附加费,
总金额,
日期格式(日期解析(tpep提取日期时间,%Y-%c-%d%k:%i:%s'),“%c”)为月份,
日期格式(日期解析(tpep提取日期时间,%Y-%c-%d%k:%i:%s'),“%Y”)为年份,
日期格式(日期解析(tpep提取日期时间,%Y-%c-%d%k:%i:%s'),“%c”)为月份
来自sampleDB.yellow\u trip\u data\u raw;

这可能是因为雅典娜的分布式特性,每个“节点”生成一个单独的文件?