簡體   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