如何在 Amazon Athena 中建立和使用分割區資料表?

2 分的閱讀內容
0

我想要在 Amazon Athena 建立分割資料表,並使用它們來改善我的查詢。

簡短描述

透過分割 Athena 表格,您可以限制每個查詢掃描的資料量,進而改善效能並降低成本。分割會將您的表格分成幾個部分,並根據欄值將相關資料保留在一起。分割區充當虛擬欄,有助於減少每次查詢掃描的資料量。

建立資料表並對資料進行分割時,請考量下列事項:

  • 您必須將資料以分割形式存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體上。
  • 建立資料表時,請包括分割欄和分割的資料的根位置。
  • 選擇適當的方法將分割區載入 AWS Glue Data Catalog。在執行查詢時,表格會參照 Data Catalog。
  • 在 Amazon S3 中對高度分割的資料使用分割區投影。

解決方法

在建立含有分割區的表格時,請注意以下幾點。

儲存在 Amazon S3 上

資料必須分割並儲存在 Amazon S3 上。分割的資料可能採用下列其中一種格式:

  • Hive 樣式格式 (例如:s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv)
    **注意:**路徑包括分割區鍵的名稱及其值 (例如:year=2021)
  • 非 Hive 樣式格式 (例如:s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv)

建立表格時包含分割資訊

CREATE TABLE 語句必須包含分割詳細資訊。使用 PARTITIONED BY 來定義分割區欄,使用 LOCATION 來指定分割的資料的根位置。執行類似下列內容的查詢:

CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'

在查詢中取代下列項目:

  • doc-example-table 取代為您要建立的表格之名稱
  • doc-example-bucket 取代為您在其中儲存表格的 S3 儲存貯體之名稱
  • example-folder 取代為 S3 資料夾的名稱
  • firstlastusername 取代為欄的名稱
  • yearmonthday 取代為分割區欄的名稱

使用適合您的使用案例的方法將分割區載入 Data Catalog

建立表格後,將分割區新增至 Data Catalog。您可以使用下列其中一種方法來執行此操作:

  • **對 Hive 樣式格式資料使用 MSCK REPAIR TABLE 查詢:**MSCK REPAIR TABLE 命令會掃描檔案系統 (例如 Amazon S3),以尋找 HIVE 相容的分割區。該命令會將它們與表格中已存在的分割區進行比較,然後將新分割區新增至 Data Catalog。請執行類似下列內容的命令:
    **注意:**如果您擁有逾數千個分割區,則此方法不是最佳實踐。您的 DDL 查詢可能會遇到逾時問題。如需詳細資訊,請參閱為什麼我的 MSCK REPAIR TABLE 查詢無法將分割區新增到 AWS Glue Data Catalog?
MSCK REPAIR TABLE doc-example-table
  • **對 Hive 樣式和非 Hive 樣式格式資料使用 ALTER TABLE ADD PARTITION 查詢:**ALTER TABLE ADD PARTITION 命令會將一個或多個分割區新增至 Data Catalog。在命令中,指定分割區欄名稱和值對,以及儲存該分割區資料檔案的 Amazon S3 路徑。您可以透過執行類似下列的命令,為每個查詢新增一個分割區或一批分割區:
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
  • **對 Hive 和非 Hive 樣式格式資料使用 AWS Glue 爬蟲程式:**您可以使用 Glue 爬蟲程式,從資料集自動推斷表格架構、建立資料表,然後將分割區新增至 Data Catalog。或者,您也可以使用爬蟲程式,只將分割區新增至使用 CREATE TABLE 語句手動建立的表格。若要使用爬蟲程式新增分割區,請在定義爬蟲程式時,指定一或多個現有的 Data Catalog 表格作為編目的來源,而不是指定資料儲存。爬蟲程式會探索 Data Catalog 表格指定的資料儲存。不會建立新表格。相反,會更新手動建立的表格,並新增分割區。如需詳細資訊,請參閱設定爬蟲程式組態選項
  • **在 Amazon S3 中對高度分割的資料使用分割區投影:**如果 Amazon S3 中有高度分割的資料,將分割區新增到 Data Catalog 可能不切實際且耗時。對高度分割的表格的查詢不能快速完成。在這種情況下,您可以使用分割區投影功能來加快高度分割的表格的查詢處理速度,並自動化分割區管理。在分割區投影中,Athena 會根據組態計算分割區的值和位置,而不是從儲存庫 (例如 AWS Glue Data Catalog) 讀取。這表示不需要透過分割區投影將分割區新增至 Data Catalog。由於記憶體內作業通常比遠端作業快,因此分割區投影可減少對高度分割表格的查詢的執行時間。分割區投影功能目前適用於枚舉的值、整數、日期或插入的分割區欄類型。如需詳細資訊,請參閱使用 Amazon Athena 的分割區投影

相關資訊

當我查詢 Amazon Athena 資料表時,為什麼會得到零筆記錄?

AWS 官方
AWS 官方已更新 3 年前