CTAS查詢的考量和限制 - Amazon Athena

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

CTAS查詢的考量和限制

下列各節說明在 Athena 中使用 CREATE TABLE AS SELECT (CTAS) 查詢時應注意的考量和限制。

了解查CTAS詢語法

查CTAS詢語法與CREATE [EXTERNAL] TABLE用於建立資料表的語法不同。請參閱 CREATE TABLE AS

視圖和CTAS查詢之間的區別

CTAS查詢會將新資料寫入 Amazon S3 中的指定位置。視圖不寫入任何數據。

指定CTAS查詢結果的位置

如果您的工作群組為查詢結果位置覆寫用戶端設定,則 Athena 會在位置 s3://amzn-s3-demo-bucket/tables/<query-id>/ 中建立資料表。若要查看為工作群組指定的查詢結果位置,請檢視工作群組的詳細資訊

如果您的工作群組未覆寫查詢結果位置,您可以使用CTAS查詢WITH (external_location ='s3://amzn-s3-demo-bucket/')中的語法來指定CTAS查詢結果的儲存位置。

注意

external_location 屬性必須指定空白的位置。CTAS查詢會檢查值區中的路徑位置 (前綴) 是否為空,如果該位置已經包含資料,則絕不會覆寫資料。若要再次使用相同的位置,請刪除儲存貯體的金鑰前綴位置中的資料。

如果您省略 external_location 語法而且未使用工作群組設定,則 Athena 會使用查詢結果位置的用戶端設定,並在位置 s3://amzn-s3-demo-bucket/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/ 中建立資料表。

尋找孤立檔案

如果 CTASINSERT INTO 陳述式失敗,該資料位置可能遺留孤立的資料。由於 Athena 在某些案例中不會從儲存貯體中刪除資料或部分資料,因此您可以在後續查詢中讀取此部分資料。若要尋找孤立檔案以進行檢測或刪除,您可以使用 Athena 提供的資料資訊清單檔案來追蹤要寫入的檔案清單。如需詳細資訊,請參閱識別查詢輸出檔案DataManifestLocation

請記住,ORDERBY 子句被忽略

在CTAS查詢中,Athena 會忽略查詢SELECT部分中的ORDER BY子句。

根據SQL規格 (ISO9075 第 2 部分),只有立即包含ORDER BY子句的查詢運算式,才能保證查詢運算式所指定之資料表資料列的順序。在任何情況下,中的表本質上都SQL是無序的,並且實現 ORDER BY in sub 查詢子句都會導致查詢執行不佳,並且不會導致有序輸出。因此,在 Athena CTAS 查詢中,無法保證在寫入資料時會保留ORDER BY子句指定的順序。

選擇儲存查詢結果的格式

您可以將CTAS結果儲存在PARQUETORCAVROJSON、和中TEXTFILE。格式不支援多字元分隔符號。CTAS TEXTFILE如果您未指定資料儲存格式,依預設,CTAS查詢結果會儲存在 Parquet 中。

CTAS查詢不需要指定 a SerDe 來解譯格式轉換。請參閱 Example: Writing query results to a different format

考慮壓縮格式

GZIP壓縮用於CTAS查詢結果的格式JSON和TEXTFILE格式。對於 Parquet,您可以使用 GZIPSNAPPY,預設值為 GZIP。對於ORC,您可以使用LZ4SNAPPYZLIB、、或ZSTD,預設值為ZLIB。如需指定壓縮的CTAS範例,請參閱Example: Specifying data storage and compression formats。如需有關 Athena 中壓縮的資訊,請參閱 在 Athena 使用壓縮

分區和存儲您的結果

您可以對CTAS查詢的結果資料進行分割和儲存貯體。若要指定目的地資料表的特性,請在子句結尾加入分割和設定時段述詞。WITH如需詳細資訊,請參閱 使用分割和分區設定Example: Creating bucketed and partitioned tables

當您用CTAS來建立分區資料表時,Athena 的寫入限制為 100 個分割區。如需解決 100 個分割區限制的相關資訊,請參閱 使用CTAS並INSERTINTO解決 100 個分區限制

加密您的結果

您可以在 Amazon S3 中加密CTAS查詢結果,類似於在 Athena 中加密其他查詢結果的方式。如需詳細資訊,請參閱加密存放在 Amazon S3 中的 Athena 查詢結果

預期的值區擁有者設定不適用於 CTAS

對於CTAS陳述式,預期的儲存貯體擁有者設定不適用於 Amazon S3 中的目標資料表位置。預期的儲存貯體擁有者設定僅適用於您為 Athena 查詢結果指定的 Simple Storage Service (Amazon S3) 輸出位置。如需詳細資訊,請參閱使用 Athena 主控台指定查詢結果位置

列數據類型被保留

查詢的資料行資料類型與原始CTAS查詢指定的資料行資料類型相同。