如何解决AWS Glue / Athena-S3-表分区
假设我有一个在AWS Glue中注册的外部表,该表在S3中并由Athena查询。 最佳实践是对数据进行分区。因此,在正常情况下,我有两个看似相同的选项,
1. /data/_path/yyyy/mm/dd/col1/col2/data.parquet
2. /data/_path/col1/col2/yyyy/mm/dd/data.parquet
我会假设,对于给定的col1和/或col2,Athena扫描/查询的数据都是相同的。 但是哪个是首选,为什么?
解决方法
如果根据yyyy / mm / dd快速生成数据,则选择#1。
例如,您一个月内生成的数据每天从01到30(或29,31)发生,因此模式是好的。
另一个例子,您生成的数据发生在小时级别,因此模式yyyy / mm / dd / hh会很好。
如果基于col1 / col2快速生成数据,则选项#2
例如,您生成的数据基于col1(班级ID)/ col2(学生ID)而变化,数据属于学生ID,则遵循yyyy / mm / dd,因此您可以继续进行col1 / col2 / yyyy / mm / dd
或者您可以想到,如果您的用例在查询数据时更经常使用col1 / col2,那么选项#2是一个不错的选择。
对我来说,如果我们比较两种选择的效果,我认为这并不重要。
,首选方式是从最小粒度变量到最大粒度变量。
通常是第一个答案,因为您的年数少于几个月,月数少于天数,天数少于col1,而col1比col2少。
但是,如果您有任何要求col1和col2先出现然后再出现几年的规范,这将不是问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。