本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定分割區投影
在資料表屬性中設定分割區投影共有兩個步驟:
-
為每個分割區資料欄指定資料範圍和相關模式,或使用自訂範本。
-
啟用資料表的分割區投影。
注意
在您將分割區投影屬性新增至現有的資料表之前,您要設定分割區投影屬性的分割區資料欄必須已經存在於資料表結構描述中。如果分割區資料欄尚未存在,您必須手動將分割區資料欄新增至現有資料表。 AWS Glue 不會自動為您執行此步驟。
本節說明如何設定 的資料表屬性 AWS Glue。若要設定它們,您可以使用 AWS Glue 主控台、Athena CREATE TABLE查詢或AWS Glue API操作。下列程序說明如何在 AWS Glue 主控台中設定 屬性。
使用 AWS Glue 主控台設定和啟用分割區投影
登入 AWS Management Console 並在 開啟 AWS Glue 主控台https://console.aws.amazon.com/glue/
。 -
選擇 Tables (資料表) 索引標籤。
在 Tables (資料表) 索引標籤上,您可以編輯現有資料表,或選擇 Add tables (新增資料表) 以建立新的資料表。如需有關手動或使用爬蟲程式新增資料表的資訊,請參閱《AWS Glue 開發人員指南》中的 在 AWS Glue 主控台上使用資料表。
-
在資料表清單中,選擇您要編輯之資料表的連結。
-
選擇 Actions (動作)、Edit table (編輯資料表)。
-
在 Edit table (編輯資料表) 頁面的 Table properties (資料表屬性) 區段中,針對每個分割的資料欄新增下列索引鍵/值組:
-
對於 Key (索引鍵),新增
projection.
。columnName
.type -
對於 Value (值),新增其中一個支援的類型:
enum
、integer
、date
或injected
。如需詳細資訊,請參閱支援的分割區投影類型。
-
-
遵循支援的分割區投影類型中的指導,根據您的組態需求新增額外的索引鍵/值組。
下列範例資料表組態會設定分割區投影的
year
資料欄,限制可傳回值的範圍為 2010 年到 2016 年。 -
新增索引鍵/值組以啟用分割區投影。對於 Key (索引鍵),輸入
projection.enabled
,對於其 Value (值),輸入true
。注意
您可以透過將
projection.enabled
設定為false
,隨時停用此資料表上的分割區投影。 -
完成時,請選擇 Save (儲存)。
-
在 Athena 查詢編輯器中,測試查詢您為資料表設定的資料欄。
下列範例查詢使用
SELECT DISTINCT
從year
資料欄傳回唯一值。資料庫包含 1987 年到 2016 年的資料,但projection.year.range
屬性將傳回的值限制為 2010 年到 2016 年。注意
如果您將
projection.enabled
設定為true
但無法設定一或多個分割區資料欄,您會收到如下所示的錯誤訊息:HIVE_METASTORE_ERROR: Table
.database_name
.table_name
is configured for partition projection, but the following partition columns are missing projection configuration: [column_name
] (tabledatabase_name
.table_name
)
如何指定自訂 S3 儲存位置
在 中編輯資料表屬性時 AWS Glue,您也可以為投影的分割區指定自訂 Amazon S3 路徑範本。自訂範本可讓 Athena 將分割區值正確地對應到不遵循典型 .../column=value/...
模式的自訂 Amazon S3 檔案位置。
使用自訂範本是選擇性的。不過,如果您使用自訂範本,則範本必須包含每個分割區資料欄的預留位置。範本位置必須以正斜線結尾,以便分割的資料檔案存在於每個分割區的「資料夾」中。
指定自訂分割區位置範本
-
依照使用 AWS Glue 主控台 設定和啟用分割區投影的步驟,新增額外的鍵值對,指定自訂範本,如下所示:
-
在 Key (索引鍵) 欄位,輸入
storage.location.template
。 -
對於 Value (值),指定包含每個分割區資料欄之預留位置的位置。請確定每個預留位置 (及 S3 路徑本身) 是以單一正斜線結尾。
下列範例範本值假設資料表具有分割區資料欄
a
、b
和c
。s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/${c}/
s3://amzn-s3-demo-bucket/table_root/c=${c}/${b}/some_static_subdirectory/${a}/${b}/${c}/${c}/
對於相同的資料表,下列範例範本值無效,因為它不包含資料欄
c
的預留位置。s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/
-
-
選擇 Apply (套用)。