如何選擇分區鍵 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

如何選擇分區鍵

您可以指定分割區投影將分割區位置映射至分割區索引鍵的方式。在前一部份的 CREATE TABLE 範例中,日期和小時被合併成一個名為 datehour 的分割區索引鍵,但也可以使用其他結構描述。例如,您也可以針對年份、月份、日期及小時,設定個別分割區索引鍵的資料表。

但是,將日期分割為年、月和日,表示無法使用 date 分割區投影類型。另一種方法是將日期與小時分開,即可仍然利用 date 分割區投影類型,但讓指定小時範圍的查詢更易於閱讀。

請記住,以下 CREATE TABLE 範例將日期與小時分開。由於中date是保留字SQL,因此範例會用day作代表日期之分割索引鍵的名稱。

CREATE EXTERNAL TABLE my_ingested_data2 ( ... ) ... PARTITIONED BY ( day STRING, hour INT ) LOCATION "s3://amzn-s3-demo-bucket/prefix/" TBLPROPERTIES ( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.format" = "yyyy/MM/dd", "projection.day.range" = "2021/01/01,NOW", "projection.day.interval" = "1", "projection.day.interval.unit" = "DAYS", "projection.hour.type" = "integer", "projection.hour.range" = "0,23", "projection.hour.digits" = "2", "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${day}/${hour}/" )

在範例 CREATE TABLE 陳述式中,小時是個別的分割區索引鍵並設定為整數。小時分割區索引鍵的組態會指定範圍 0 到 23,而當 Athena 產生分割區位置時,小時應該格式化為兩位數。

my_ingested_data2 資料表的查詢可能如下所示:

SELECT * FROM my_ingested_data2 WHERE day = '2021/11/09' AND hour > 3

了解分區鍵和分區投影數據類型

請注意,第一個 CREATE TABLE 範例中的 datehour 索引鍵在分割區投影組態中設定為 date,但是分割區索引鍵的類型為 string。第二個範例中的 day 也是如此。分割區投影組態中的類型只會告訴 Athena 在產生分割區位置時如何將值格式化。您指定的類型不會變更分割區索引鍵的類型;在查詢中,datehourdaystring 類型。

當查詢包含類似 day = '2021/11/09' 的條件時,Athena 會使用分割區投影組態中指定的日期格式剖析表達式右側的字串。在 Athena 確認日期是否位於所設定範圍後,它會再次使用日期格式將日期作為字串插入儲存位置範本。

同樣,對於像 day > '2021/11/09' 的查詢條件,Athena 會剖析右側並產生設定範圍內所有相符日期的清單。然後,它會使用日期格式將每個日期插入儲存位置範本,以建立分割區位置的清單。

寫入與 day > '2021-11-09'day > DATE '2021-11-09' 相同的條件不起作用。在第一種情況下,日期格式不相符 (請注意連字號而不是正斜線),而在第二種情況下,資料類型不相符。