本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用檢視
Amazon Athena 中的檢視是邏輯資料表,而非實體資料表。每次在查詢中參考檢視時,定義該檢視的查詢就會執行。
您可以從 SELECT
查詢建立檢視,然後在未來的查詢中參考此檢視。如需詳細資訊,請參閱CREATE VIEW。
何時使用檢視?
您建立檢視可能是為了:
-
查詢資料子集。例如,您可以根據原始資料表建立包含資料欄子集的檢視,以簡化查詢資料。
-
在一個查詢中合併多個資料表。當您有多個資料表,且想要使用
UNION ALL
合併它們時,您可以使用該表達式建立檢視,以簡化查詢已合併的資料表。 -
隱藏現有基礎查詢的複雜性並簡化使用者執行的查詢。基礎查詢通常包含資料表之間的聯結、欄清單中的表達式,以及其他 SQL 語法,導致難以了解和除錯。您可以建立檢視以隱藏複雜性並簡化查詢。
-
實驗最佳化技巧並建立最佳化查詢。例如,如果您發現有一組
WHERE
條件、JOIN
順序或其他表達式可展現最佳效能,您可以使用這些子句和表達式來建立檢視。然後,應用程式可以對此檢視執行相當簡單的查詢。如果您後來發現有更好的方式可最佳化原始查詢,當您重新建立檢視時,所有應用程式就可立即利用最佳化基礎查詢。 -
隱藏基礎資料表和欄名稱,將維護問題減到最少 (如果這些名稱變更)。在這種情況下,您可以使用新的名稱重新建立檢視。所有使用檢視 (而不是基礎資料表) 的查詢可繼續執行,而不需要變更。
Athena 中對檢視支援的動作
Athena 對檢視支援下列動作。您可以在查詢編輯器中執行這些命令。
陳述式 | 描述 |
---|---|
CREATE VIEW |
從指定的 選用的 |
DESCRIBE VIEW |
顯示指定檢視的資料欄清單。這可讓您檢查複雜檢視的屬性。 |
DROP VIEW |
刪除現有的檢視。如果檢視不存在,選用的 |
SHOW CREATE VIEW |
顯示用於建立指定檢視的 SQL 陳述式。 |
SHOW VIEWS |
列出指定的資料庫或目前資料庫 (如果省略資料庫名稱) 中的檢視。使用選用的 |
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 主控台中,您可以:
-
在列出資料表的左側窗格中,找到所有檢視。
-
篩選檢視。
-
預覽檢視、顯示其屬性、編輯它或刪除它。
顯示檢視畫面的動作
必須先建立檢視,檢視才會出現在主控台中。
-
在 Athena 主控台中,選擇 Views (檢視),然後選擇一個檢視以將其展開並在檢視中顯示資料欄。
-
選擇檢視旁的三個垂直點可顯示檢視的動作清單。
-
選擇動作可預覽檢視、將檢視名稱插入查詢編輯器中、刪除檢視、查看檢視的屬性,或在查詢編輯器中顯示和編輯檢視。
建立檢視
使用範本或執行現有查詢可在 Athena 主控台中建立檢視。
使用範本建立檢視
-
在 Athena 主控台中的 Tables and views (資料表和檢視) 旁,選擇 Create (建立),然後選擇 Create view (建立檢視)。
此動作會將可編輯的檢視範本放入查詢編輯器中。
-
根據您的需求編輯檢視範本。在陳述式中輸入檢視的名稱時,請謹記,視圖名稱不能包含底線
(_)
以外的特殊字元。請參閱資料表、資料庫和資料欄的名稱。避免使用保留的關鍵字來命名檢視。如需建立檢視的相關詳細資訊,請參閱CREATE VIEW和檢視的範例。
-
選擇 Run (執行) 以建立檢視。檢視隨即出現在 Athena 主控台的檢視清單中。
根據現有查詢建立檢視
-
使用 Athena 查詢編輯器執行現有查詢。
-
在查詢編輯器視窗底下,選擇 Create (建立),然後選擇 View from query (從查詢建立檢視)。
-
在 Create View (建立檢視) 對話方塊中輸入檢視的名稱,然後選擇 Create (建立)。檢視名稱不可包含除了底線
(_)
以外的特殊字元。請參閱資料表、資料庫和資料欄的名稱。避免使用保留的關鍵字來命名檢視。Athena 會將檢視新增至主控台的檢視清單中,並在查詢編輯器中顯示檢視的
CREATE VIEW
陳述式。
備註
-
如果您刪除用以建立資料表的資料表,然後嘗試執行檢視,Athena 會顯示錯誤訊息。
-
您可以建立巢狀檢視,這是位於現有檢視上方的檢視。Athena 不會讓您執行自我參照的遞迴檢視。
檢視的範例
若要顯示檢視查詢的語法,請使用 SHOW CREATE VIEW。
範例 1
假設有以下兩個資料表:資料表 employees
有兩欄:id
和 name
;資料表 salaries
有兩欄:id
和 salary
。
在這個範例中,我們以 SELECT
查詢建立名為 name_salary
的檢視,從資料表 employees
和 salaries
取得映射到 salaries 的 ID 清單:
CREATE VIEW name_salary AS SELECT employees.name, salaries.salary FROM employees, salaries WHERE employees.id = salaries.id
範例 2
在下列範例中,我們建立名為 view1
的檢視,讓您隱藏較複雜的查詢語法。
此檢視在兩個資料表上執行:table1
和 table2
,其中每個資料表是不同的 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;
如需有關查詢聯合檢視的資訊,請參閱 查詢聯合檢視。