使用檢視 - Amazon Athena

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

使用檢視

Amazon Athena 中的檢視是邏輯資料表,而非實體資料表。每次在查詢中參考檢視時,定義該檢視的查詢就會執行。

您可以從 SELECT 查詢建立檢視,然後在未來的查詢中參考此檢視。如需詳細資訊,請參閱CREATE VIEW

何時使用檢視?

您建立檢視可能是為了:

  • 查詢資料子集。例如,您可以根據原始資料表建立包含資料欄子集的檢視,以簡化查詢資料。

  • 在一個查詢中合併多個資料表。當您有多個資料表,且想要使用 UNION ALL 合併它們時,您可以使用該表達式建立檢視,以簡化查詢已合併的資料表。

  • 隱藏現有基礎查詢的複雜性並簡化使用者執行的查詢。基礎查詢通常包含資料表之間的聯結、欄清單中的表達式,以及其他 SQL 語法,導致難以了解和除錯。您可以建立檢視以隱藏複雜性並簡化查詢。

  • 實驗最佳化技巧並建立最佳化查詢。例如,如果您發現有一組 WHERE 條件、JOIN 順序或其他表達式可展現最佳效能,您可以使用這些子句和表達式來建立檢視。然後,應用程式可以對此檢視執行相當簡單的查詢。如果您後來發現有更好的方式可最佳化原始查詢,當您重新建立檢視時,所有應用程式就可立即利用最佳化基礎查詢。

  • 隱藏基礎資料表和欄名稱,將維護問題減到最少 (如果這些名稱變更)。在這種情況下,您可以使用新的名稱重新建立檢視。所有使用檢視 (而不是基礎資料表) 的查詢可繼續執行,而不需要變更。

Athena 中對檢視支援的動作

Athena 對檢視支援下列動作。您可以在查詢編輯器中執行這些命令。

陳述式 描述
CREATE VIEW

從指定的 SELECT 查詢建立新的檢視。如需詳細資訊,請參閱建立檢視

選用的 OR REPLACE 子句可讓您透過取代來更新現有的檢視。

DESCRIBE VIEW

顯示指定檢視的資料欄清單。這可讓您檢查複雜檢視的屬性。

DROP VIEW

刪除現有的檢視。如果檢視不存在,選用的 IF EXISTS 子句可以阻止錯誤發生。

SHOW CREATE VIEW

顯示用於建立指定檢視的 SQL 陳述式。

SHOW VIEWS

列出指定的資料庫或目前資料庫 (如果省略資料庫名稱) 中的檢視。使用選用的 LIKE 子句搭配規則表達式,以限制檢視名稱的清單。您也可以在主控台的左側窗格中看到檢視清單。

SHOW COLUMNS

列出檢視的結構描述中的欄。

檢視的考量

在 Athena 中建立和使用檢視時有以下考量事項:

  • 在 Athena 中,您可以預覽並使用在 Athena 主控台中建立的檢視,如果您已遷移到使用檢視 AWS Glue Data Catalog,或者在連線至相同目錄的 Amazon EMR 叢集上執行 Presto,則可以在中進行預覽和使用。您無法預覽或在 Athena 中新增以其他方式建立的檢視。

  • 如果要透過「 AWS Glue資料目錄」建立檢視,則必須包括PartitionKeys參數並將其值設定為空清單,如下所示:"PartitionKeys":[]否則,您的檢視查詢在 Athena 中會失敗。以下範例顯示從資料目錄使用 "PartitionKeys":[] 建立的檢視:

    aws glue create-table --database-name mydb --table-input '{ "Name":"test", "TableType": "EXTERNAL_TABLE", "Owner": "hadoop", "StorageDescriptor":{ "Columns":[{ "Name":"a","Type":"string"},{"Name":"b","Type":"string"}], "Location":"s3://xxxxx/Oct2018/25Oct2018/", "InputFormat":"org.apache.hadoop.mapred.TextInputFormat", "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "SerdeInfo":{"SerializationLibrary":"org.apache.hadoop.hive.serde2.OpenCSVSerde", "Parameters":{"separatorChar": "|", "serialization.format": "1"}}},"PartitionKeys":[]}'
  • 如果您已在資料目錄中建立 Athena 檢視,則資料目錄會將檢視視為資料表。您可以在資料目錄中使用資料表層級的精細存取控制,對這些檢視限制存取

  • Athena 會阻止您執行遞迴檢視,且在這種情況下會顯示錯誤訊息。遞迴檢視是自我參考的檢視查詢。

  • Athena 會在偵測到過時的檢視時顯示錯誤訊息。當發生下列其中一種情況時,便會報告過時的檢視:

    • 檢視參考資料表或資料庫不存在。

    • 在參考的資料表中進行了結構描述或中繼資料變更。

    • 參考的資料表遭捨棄,並使用不同的結構描述或組態重新建立。

  • 只要巢狀檢視背後的查詢有效,而且資料表和資料庫存在,您就可以建立和執行巢狀檢視。

檢視限制

  • Athena 檢視名稱不可包含除了底線 (_) 以外的特殊字元。如需詳細資訊,請參閱資料表、資料庫和資料欄的名稱

  • 避免使用預留關鍵字來命名檢視。如果您使用預留關鍵字,請在檢視的查詢中以雙引號括住預留關鍵字。請參閱保留的關鍵字

  • 您無法將在 Athena 中建立的檢視與外部 Hive 中繼存放區或 UDF 搭配使用。如需使用在 Hive 外部建立的檢視的相關資訊,請參閱 使用 Hive 檢視

  • 您不能使用具有地理空間函數的檢視。

  • 對於 Amazon S3 中的資料,您無法使用檢視來管理存取控制。若要查詢檢視,您需要許可來存取 Amazon S3 中存放的資料。如需詳細資訊,請參閱 存取 Amazon S3

  • 雖然 Athena 引擎版本 2 和 Athena 引擎版本 3 皆支援跨帳戶查詢檢視,但您無法建立包含跨帳戶 AWS Glue Data Catalog的檢視。如需有關跨帳戶資料目錄存取的資訊,請參閱跨帳戶存取 AWS Glue 資料目錄

  • Athena 中的檢視不支援 Hive 或 Iceberg 隱藏的中繼資料欄 $bucket$file_modified_time$file_size$partition。如需有關在 Athena 中使用 $path 中繼資料欄的資訊,請參閱 在 Amazon S3 中取得來源資料的檔案位置

在主控台使用檢視

在 Athena 主控台中,您可以:

  • 在列出資料表的左側窗格中,找到所有檢視。

  • 篩選檢視。

  • 預覽檢視、顯示其屬性、編輯它或刪除它。

顯示檢視畫面的動作

必須先建立檢視,檢視才會出現在主控台中。

  1. 在 Athena 主控台中,選擇 Views (檢視),然後選擇一個檢視以將其展開並在檢視中顯示資料欄。

  2. 選擇檢視旁的三個垂直點可顯示檢視的動作清單。

    
                        檢視的動作選單。
  3. 選擇動作可預覽檢視、將檢視名稱插入查詢編輯器中、刪除檢視、查看檢視的屬性,或在查詢編輯器中顯示和編輯檢視。

建立檢視

使用範本或執行現有查詢可在 Athena 主控台中建立檢視。

使用範本建立檢視
  1. 在 Athena 主控台中的 Tables and views (資料表和檢視) 旁,選擇 Create (建立),然後選擇 Create view (建立檢視)。

    
                        建立檢視。

    此動作會將可編輯的檢視範本放入查詢編輯器中。

  2. 根據您的需求編輯檢視範本。在陳述式中輸入檢視的名稱時,請謹記,視圖名稱不能包含底線 (_) 以外的特殊字元。請參閱資料表、資料庫和資料欄的名稱。避免使用保留的關鍵字來命名檢視。

    如需建立檢視的相關詳細資訊,請參閱CREATE VIEW檢視的範例

  3. 選擇 Run (執行) 以建立檢視。檢視隨即出現在 Athena 主控台的檢視清單中。

根據現有查詢建立檢視
  1. 使用 Athena 查詢編輯器執行現有查詢。

  2. 在查詢編輯器視窗底下,選擇 Create (建立),然後選擇 View from query (從查詢建立檢視)。

    
                        選擇 Create (建立)、View from query (從查詢建立檢視)。
  3. Create View (建立檢視) 對話方塊中輸入檢視的名稱,然後選擇 Create (建立)。檢視名稱不可包含除了底線 (_) 以外的特殊字元。請參閱資料表、資料庫和資料欄的名稱。避免使用保留的關鍵字來命名檢視。

    Athena 會將檢視新增至主控台的檢視清單中,並在查詢編輯器中顯示檢視的 CREATE VIEW 陳述式。

備註
  • 如果您刪除用以建立資料表的資料表,然後嘗試執行檢視,Athena 會顯示錯誤訊息。

  • 您可以建立巢狀檢視,這是位於現有檢視上方的檢視。Athena 不會讓您執行自我參照的遞迴檢視。

檢視的範例

若要顯示檢視查詢的語法,請使用 SHOW CREATE VIEW

範例 1

假設有以下兩個資料表:資料表 employees 有兩欄:idname;資料表 salaries 有兩欄:idsalary

在這個範例中,我們以 SELECT 查詢建立名為 name_salary 的檢視,從資料表 employeessalaries 取得映射到 salaries 的 ID 清單:

CREATE VIEW name_salary AS SELECT employees.name, salaries.salary FROM employees, salaries WHERE employees.id = salaries.id
範例 2

在下列範例中,我們建立名為 view1 的檢視,讓您隱藏較複雜的查詢語法。

此檢視在兩個資料表上執行:table1table2,其中每個資料表是不同的 SELECT 查詢。此檢視從 table1 選取資料欄,然後將結果與 table2 聯結。聯結是根據兩個資料表中都存在的 a 資料欄。

CREATE VIEW view1 AS WITH table1 AS ( SELECT a, MAX(b) AS the_max FROM x GROUP BY a ), table2 AS ( SELECT a, AVG(d) AS the_avg FROM y GROUP BY a) SELECT table1.a, table1.the_max, table2.the_avg FROM table1 JOIN table2 ON table1.a = table2.a;

如需有關查詢聯合檢視的資訊,請參閱 查詢聯合檢視