繁体   English   中英

AWS Glue/Athena - S3 - 表分区

[英]AWS Glue/Athena - S3 - Table partitioning

假设我在 AWS Glue 中注册了一个外部表,该表位于 S3 中并由 Athena 查询。 最佳做法是对数据进行分区。 所以在正常情况下,我有两个看似相同的选择,

1. /data/_path/yyyy/mm/dd/col1/col2/data.parquet
2. /data/_path/col1/col2/yyyy/mm/dd/data.parquet

我假设 Athena 扫描/查询的数据对于给定的 col1 和/或 col2 是相同的。 但哪一个是首选,为什么?

如果数据是基于 yyyy/mm/dd 快速生成的,则选项 #1。

例如,您在一个月内生成的数据发生在从 01 到 30(或 29,31)的每一天,因此该模式很好。

或者另一个例子,你生成的数据发生在小时级别,所以模式 yyyy/mm/dd/hh 会很棒。

如果数据是基于 col1/col2 快速生成的,则选项 #2

例如,您生成的数据基于 col1 (class id)/col2 (student id) 发生变化,并且数据属于学生 id 遵循 yyyy/mm/dd,因此您可以继续使用 col1/col2/yyyy/mm/dd

或者您可以想到,如果您的用例在查询数据方面更频繁地使用 col1/col2,那么选项 #2 是一个不错的选择。

对我来说,如果我们比较 2 个选项的性能,我认为这并不重要。

优选的方式是从最小粒度的变量到最大粒度的变量。

通常是第一个答案,因为您的年数少于月数,月数少于天数,天数少于 col1s,而 col1s 少于 col2s。

但是如果你有任何需要 col1s 和 col2s 先来,然后是几年的规范,这将不是问题。

暂无
暂无

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

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