本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如何選擇分區鍵
您可以指定分割區投影將分割區位置映射至分割區索引鍵的方式。在前一部份的 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 在產生分割區位置時如何將值格式化。您指定的類型不會變更分割區索引鍵的類型;在查詢中,datehour
和 day
為 string
類型。
當查詢包含類似 day = '2021/11/09'
的條件時,Athena 會使用分割區投影組態中指定的日期格式剖析表達式右側的字串。在 Athena 確認日期是否位於所設定範圍後,它會再次使用日期格式將日期作為字串插入儲存位置範本。
同樣,對於像 day > '2021/11/09'
的查詢條件,Athena 會剖析右側並產生設定範圍內所有相符日期的清單。然後,它會使用日期格式將每個日期插入儲存位置範本,以建立分割區位置的清單。
寫入與 day > '2021-11-09'
或 day >
DATE '2021-11-09'
相同的條件不起作用。在第一種情況下,日期格式不相符 (請注意連字號而不是正斜線),而在第二種情況下,資料類型不相符。