在
SELECT
中运行 Athena
查询会在 Amazon S3
中以未压缩的 CSV 格式生成单个结果文件,这是默认行为。
如果您的查询预计输出大型结果集,则需要花费大量时间将结果作为单个文件写入 Amazon S3。使用
UNLOAD
,您可以将结果拆分为 Amazon S3 中的多个文件,这减少了写入阶段花费的时间,从而提高性能,您甚至可以使用 parquet
等压缩技术。
您尝试做的并不是卸载的目的。一种解决方案是编写某种后处理器,它将在写入完成后合并文件。也许使用 S3 写入时触发的
lambda
函数。
假设您的 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
您可以通过指定具有常量值的单个分桶列并设置bucket_count = 1,欺骗 Athena 为 CTAS 查询生成单个大型结果文件。这可以生成非常大的单个文件,其格式不是 CSV。