繁体   English   中英

如何在 AWS Athena 中对表进行分区?

[英]How to partition a table in AWS Athena?

我正在尝试构建一个使用 Athena 来呈现 Cloudtrail 日志的应用程序。 一个简单的查询大约需要 4 分钟。 它扫描大约 200 GB。 我正在寻找的是:(查询中至少使用了这些字段之一)[事件名称、事件时间、用户名、事件源、资源类型、资源名称]

例如

SELECT eventid,
    eventname,
    eventsource,
    resources [ 1 ].arn,
    resources [ 1 ].type,
    useridentity.username
FROM My_Table
WHERE useridentity.username = 'username'
    AND eventtime BETWEEN '2022-07-10T13:14' AND '2022-07-27T13:14'

如何优化查询时间? 我阅读了 Amazon Athena 的 10 大性能调优技巧 我正在尝试对数据进行分区,但是我发现的所有文章和示例都没有太大帮助。

有人可以为我提供一种分区数据的方法吗? 或者,如果有另一种方法可以加速性能。 (我已经有一张桌子,所以我想ALTER它,我的 S3 存储桶 URI 是这样的: XXXXXXXXXXXXXXX/us-east-1/2022/07/25/

我建议您首先以 Snappy 压缩 Parquet 格式创建一个表。

您可以从现有表创建新表并转换格式。

来自CTAS 查询示例 - Amazon Athena

CREATE TABLE new_table
WITH (
      format = 'Parquet',
      write_compression = 'SNAPPY',
      external_location ='s3://my-bucket/tables/parquet_table/')
AS SELECT *
FROM old_table;

请注意,这将在指定的位置创建新的数据文件。 请记住,删除 Amazon Athena 中的表不会删除 Amazon S3 存储桶中的数据。

然后,您可以使用new_table比较性能。

如果您想添加分区,请使用partitioned_by运行相同的命令。

有关详细信息,请参阅: 创建表作为 - Amazon Athena

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM