支援的分割區投影類型 - Amazon Athena

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

支援的分割區投影類型

資料表可以具有 enumintegerdate,injected 分割區資料欄類型的任意組合。

列舉類型

enum類型用於值為列舉集合成員的分割區資料欄 (例如,機場代碼 或 AWS 區域)。

在資料表中定義分割區屬性,如下所示:

屬性名稱 範例值 Description
projection.columnName.type

enum

必要。用於資料欄 columnName 的投影類型。該值必須是 enum (不區分大小寫) 以表示使用列舉類型。允許開頭和結尾空格。
projection.columnName.values

A,B,C,D,E,F,G,Unknown

必要. 用於資料欄 columnName 之以逗號分隔的列舉分割區值清單。任何空格都會被視為列舉值的一部分。
注意

建議的最佳實務是將 enum 型分割區投影的使用限制成幾十個或以下。雖然enum投影沒有特定限制,但 gzip 壓縮時,資料表中繼資料的總大小不得超過約 1 MB AWS Glue 的限制。請注意,您資料表的主要部分會共用此限制,例如資料欄名稱、位置、儲存格式等。如果您發現自己在 enum 投影中使用幾十個以上的唯一 ID,請考慮使用替代方法,例如歸納為代理欄位中較少數的唯一數值。您可以透過取捨基數的方式,控制 enum 欄位中唯一數值的數量。

整數類型

對於其可能值會被解譯為定義範圍內整數的分割區資料欄,請使用整數類型。投影整數資料欄目前限制為帶正負號的 Java 長整數範圍 (-263 至 263-1,含)。

屬性名稱 範例值 Description
projection.columnName.type

integer

必要。用於資料欄 columnName 的投影類型。該值必須是 integer (不區分大小寫) 以表示使用整數類型。允許開頭和結尾空格。
projection.columnName.range

0,10

-1,8675309

0001,9999

必要. 以逗號分隔的雙元素清單,提供資料欄 columnName 上的查詢要傳回的最小和最大範圍值。請注意,值必須以逗號分隔,而非連字號。這些值包含在內,可以是負的,也可以以零開頭。允許開頭和結尾空格。
projection.columnName.interval

1

5

選用。正整數,指定用於資料欄 columnName 之連續分割區值之間的間隔。例如,range 值 "1,3" 具有 "1" 的 interval 值,會產生 1、2 和 3 的值。range 值相同但 interval 值為 "2" 會產生 1 和 3 的值,略過 2。允許開頭和結尾空格。預設為 1。
projection.columnName.digits

1

5

選用。正整數,指定用於資料欄 columnName 之分割區值最終表示法中要包含的位數。例如,range 值 "1,3" 具有 "1" 的 digits 值,會產生 1、2 和 3 的值。range 值相同但 digits 值為 "2" 會產生 01、02 和 03 的值。允許開頭和結尾空格。預設值是非靜態位數,且不以零開頭。

日期類型

對於其值會被解譯為定義範圍內之日期 (以及選用的時間) 的分割區資料欄,請使用整數類型。

重要

投影的日期資料欄會在查詢執行期以國際標準時間 (UTC) 產生。

屬性名稱 範例值 Description
projection.columnName.type

date

必要。用於資料欄 columnName 的投影類型。該值必須是 date (不區分大小寫) 以表示使用日期類型。允許開頭和結尾空格。
projection.columnName.range

201701,201812

01-01-2010,12-31-2018

NOW-3YEARS,NOW

201801,NOW+1MONTH

必要. 以逗號分隔的雙元素清單,提供資料欄 columnName 的最小和最大 range 值。這些數值包含在內,可以使用與 Java java.time.* 日期類型相容的任何格式。最小值和最大值都必須使用相同的格式。.format 屬性中指定的格式必須是用於這些值的格式。

此資料欄也可以包含相對日期字串,格式化為此規則運算式模式:

\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?|MONTHS?|WEEKS?|DAYS?|HOURS?|MINUTES?|SECONDS?)\s*)?

允許使用空格,但在日期常值中會被視為日期字串本身的一部分。

projection.columnName.format

yyyyMM

dd-MM-yyyy

dd-MM-yyyy-HH-mm-ss

必要. 根據 Java 日期格式 DateTimeFormatter 的日期格式字串。可以是任何支援的 Java.time.* 類型。
projection.columnName.interval

1

5

正整數,指定用於資料欄 columnName 之連續分割區值之間的間隔。例如,range 值為 2017-01,2018-12 搭配 interval 值為 1 以及 interval.unit 值為 MONTHS,會產生值 2017-01、2017-02、2017-03 等。相同的 range 值搭配 interval 值為 2interval.unit 值為 MONTHS,會產生值 2017-01、2017-03、2017-05 等。允許開頭和結尾空格。

如果提供的日期採用單日或單月精確度,則 interval 是選用的,並且分別預設為 1 天或 1 個月。否則,interval 是必要的。

projection.columnName.interval.unit

YEARS

MONTHS

WEEKS

DAYS

HOURS

MINUTES

SECONDS

MILLIS

時間單位,代表 ChronoUnit 的序列化格式。可能值為 YEARSMONTHSWEEKSDAYSHOURSMINUTESSECONDSMILLIS。這些值不區分大小寫。

如果提供的日期採用單日或單月精確度,則 interval.unit 是選用的,並且分別預設為 1 天或 1 個月。否則,interval.unit 是必要的。

範例– 按月份分割

下列範例資料表組態會按月份分割 2015 年至今的資料。

'projection.month.type'='date', 'projection.month.format'='yyyy-MM', 'projection.month.interval'='1', 'projection.month.interval.unit'='MONTHS', 'projection.month.range'='2015-01,NOW', ...

注入類型

注入類型適用於其可能值不能在某個邏輯範圍內依程序產生,但可在查詢的 WHERE 子句中作為單一值提供的分割區資料欄。

請務必牢記以下幾點:

  • 如果未為每個注入的資料欄提供篩選條件表達式,則注入資料欄上的查詢會失敗。

  • 只有當值為分離值時,才能成功在注入資料欄上針對篩選條件表達式查詢多個值。

  • 僅支援 string 類型的資料欄。

  • 當您使用具有注入的分割區資料欄的 WHERE IN 子句時,您可在 IN 清單中指定的值的限制為 1,000 個。若要查詢的資料集包含的注入資料欄具有超過 1,000 個分割區,則請將查詢分割為多個較小的查詢,每個查詢的 WHERE IN 子句中最多可以包含 1,000 個值,然後彙總結果。

屬性名稱 Value Description
projection.columnName.type

injected

必要. 用於資料欄 columnName 的投影類型。僅支援 string 類型。指定的值必須是 injected (不區分大小寫)。允許開頭和結尾空格。

如需詳細資訊,請參閱何時使用 injected 投影類型