为什么 AWS Athena 在目标 S3 位置转储结果时需要“溢出桶”

问题描述

为什么 AWS Athena 在将结果转储到目标 S3 位置时需要“溢出桶”

WITH
( format = 'Parquet',parquet_compression = 'SNAPPY',external_location = '**s3://target_bucket_name/my_data**' 
) 
AS
WITH my_data_2 
AS 
    (SELECT * FROM existing_tablegenerated_data" limit 10)
SELECT *
FROM my_data_2;

既然它已经有了存储数据的桶,为什么 Athena 需要溢出桶以及它在那里存储什么?

解决方法

这里是直接参与 Spill 开发的 Trino/Presto 开发人员。

在 Trino (formerly known as Presto SQL) 中,术语“溢出”是指在不适合内存的磁盘数据上转储。它是一项可选功能,允许您处理更大的查询。当然,如果您的所有查询都需要溢出,那么简单地为更大的集群预配更多内存会更有效,但是当大型查询很少时,该功能很有用。

溢出涉及保存临时数据,而不是最终查询结果。溢出的数据在查询完成执行前被重新读回并删除。

,

Athena 使用 Lambda 函数连接到外部 Hive 数据存储 由于 Lambda 函数响应大小的限制,大于阈值的响应会溢出到您在创建 Lambda 函数时指定的 Amazon S3 位置。 Athena 直接从 Amazon S3 读取这些响应。

https://docs.aws.amazon.com/athena/latest/ug/connect-to-data-source-hive.html