Athena 和 CloudTrail - 在 ['账户'、'年'、'月'、'天'] 上进行分桶(无区域)



我刚刚开始使用Athena,意图从多个帐户查询CloudTrail管理事件。

我正在按照本指南配置第一个表:

https://cloudonaut.io/analyzing-cloudtrail-with-athena/

由于CloudTrail事件的文件夹结构(密钥前缀),它被划分为:

PARTITIONED BY (account string, region string, year string, month string, day, string)

然后我用CATS创建另一个表,将JSON转换为ORC,并按照本指南存储在另一个桶中:

https://aws.amazon.com/blogs/big-data/using-ctas-statements-with-amazon-athena-to-reduce-cost-and-improve-performance/

我对数据库知识的缺乏可能使我过于贪婪。我希望在设置桶分区时跳过区域。我想不出有什么理由希望每个帐户只查询一个特定区域的管理事件,如果每个帐户每天可以有三个文件,我不希望每个帐户每天查询30个文件。

这就是我要运行的:

CREATE TABLE cloudtrail_partitioned_bucketed
WITH (
partitioned_by = ARRAY['account','year','month','day'],
bucketed_by = ARRAY['eventname'],
bucket_count = 3,
format = 'orc',
external_location = 's3://bucket/athena/out/'
)
AS
SELECT
*
FROM cloudtrail_logs

我得到错误:

HIVE_COLUMN_ORDER_MISMATCH: Partition keys must be the last columns in the table and in the same order as the table properties

当然,如果我只是按顺序使用值,而不管哪个值(帐户,地区/年,月,日)。我知道分区键不是动态的,但是我可以直接删除分区键"region"为了半兽人的转换?我从事件本身有一个区域。

欢迎任何关于这个想法有多糟糕的反馈。我脑子里的概念是每天计划运行一次,将每个帐户中的CloudTrail事件转换为不同桶中的ORC,以便与雅典娜查询一起使用。CloudTrail事件将更快地归档,Athena用户运行的所有查询将针对较小的ORC文件运行。

考虑到帐户的数量,我希望在分区键中使用region时减少必要的分区数量。

嗯,我有点笨。休息一段时间后,我又回来试了一遍。这一次,我没有假设初始表创建键与文件夹路径有任何关系。

代替:

PARTITIONED BY (account string, region string, year string, month string, day, string)
我使用

:

PARTITIONED BY (account string, year string, month string, day, string)

,它似乎工作。

我仍然不知道我所做的是否合乎逻辑。如有任何意见,我们将不胜感激。

谢谢

最新更新