是否可以将AWS Athena中的数据卸载到单个文件?

问题描述 投票:0回答:3

文档指出

UNLOAD 结果并行写入多个文件。

我想这对于读取和写入来说都更有效,因此卸载到单个文件没有意义。但是,如果由于某种原因最终用户希望将输出作为单个文件,这可能吗?

amazon-web-services amazon-athena
3个回答
4
投票

SELECT
中运行
Athena
查询会在
Amazon S3
中以未压缩的 CSV 格式生成单个结果文件,这是默认行为。

如果您的查询预计输出大型结果集,则需要花费大量时间将结果作为单个文件写入 Amazon S3。使用

UNLOAD
,您可以将结果拆分为 Amazon S3 中的多个文件,这减少了写入阶段花费的时间,从而提高性能,您甚至可以使用
parquet
等压缩技术。

您尝试做的并不是卸载的目的。一种解决方案是编写某种后处理器,它将在写入完成后合并文件。也许使用 S3 写入时触发的

lambda
函数。


3
投票

假设您的 UNLOAD 查询使用

TEXTFILE
格式和
gzip
压缩,例如:

UNLOAD( select * from my_table ) 
TO 's3://your_bucket/your_path/'
WITH (
    format = 'TEXTFILE',
    compression = 'gzip',
    field_delimiter = '\t'
)

一个简单的解决方案如下:

aws s3 cp --recursive s3://your_bucket/your_path/ .
gzip -d *
cat * > your_file.csv

0
投票

您可以通过指定具有常量值的单个分桶列并设置bucket_count = 1,欺骗 Athena 为 CTAS 查询生成单个大型结果文件。这可以生成非常大的单个文件,其格式不是 CSV。

© www.soinside.com 2019 - 2024. All rights reserved.