CREATE TABLE - Amazon Athena

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

CREATE TABLE

以您指定的名稱和參數建立資料表。

注意

此頁包含摘要參考資訊。如需在 Athena 中建立資料表的詳細資訊和範例 CREATE TABLE 陳述式,請參閱在 Athena 中建立資料表。如需在 Athena 建立資料庫、建立資料表和執行資料表 SELECT 查詢的範例,請參閱 開始使用

概要

CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [WITH SERDEPROPERTIES (...)] [LOCATION 's3://bucket_name/[folder]/'] [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

參數

EXTERNAL

指定資料表依據您指定的 LOCATION 中 Amazon S3 現有的基礎資料檔案。除了在建立 Iceberg 資料表時,請始終使用 EXTERNAL 關鍵字。如果您在非 Iceberg 資料表上使用 CREATE TABLE 卻沒有帶 EXTERNAL 關鍵字,則 Athena 會發出錯誤。當您建立外部資料表,被參考的資料必須符合預設格式或您以 ROW FORMATSTORED ASWITH SERDEPROPERTIES 子句指定的格式。

[IF NOT EXISTS]

此參數會檢查具有相同名稱的資料表是否已經存在。如果存在,參數會傳回 TRUE,Amazon Athena 會取消 CREATE TABLE 動作。由於取消會在 Athena 呼叫資料目錄之前發生,因此不會發出 AWS CloudTrail 事件。

[db_name.]table_name

指定要建立的資料表名稱。選用的 db_name 參數可指定資料表所在的資料庫。如果省略,會採用目前的資料庫。如果資料表名稱包含號碼,以引號括住 table_name,例如 "table123"。如果 table_name 以底線開頭,請使用反引號,例如 `_mytable`。不支援特殊字元 (底線除外)。

Athena 資料表名稱不區分大小寫;不過,如果您使用 Apache Spark,則 Spark 的資料表名稱需為小寫字母。

[ ( col_name data_type [COMMENT col_comment] [, ...] ) ]

指定要建立的每一欄名稱以及欄的資料類型。欄名稱不可使用底線 (_) 以外的特殊字元。如果 col_name 以底線開頭,以反引號括住欄名稱,例如 `_mycolumn`

data_type 可以是下列任何值:

  • boolean – 值為 truefalse

  • tinyint – 以兩的補數格式表示的 8 位元的有號整數,最小值為 -2^7,最大值為 2^7-1。

  • smallint – 以兩的補數格式表示的 16 位元的有號整數,最小值為 -2^15,最大值為 2^15-1。

  • int – 在資料定義語言 (DDL) 查詢中,如 CREATE TABLE,請使用 int 關鍵字來表示整數。在其他查詢中,使用關鍵字 integer,該處為 integer 以兩的補數格式表示的 32 位元有號值,最小值為 -2^31,最大值為 2^31-1。在 JDBC 驅動程式中,會傳回 integer,以確保與商業分析應用程式的相容性。

  • bigint – 以兩的補數格式表示的 64 位元的有號整數,最小值為 -2^63,最大值為 2^63-1。

  • double – 64 位元雙精度浮點數。該範圍為 4.94065645841246544e-324d 至 1.79769313486231570e+308d,正極或負極。double 遵循浮點數運算的 IEEE 標準 (IEEE 754)。

  • float – 32 位元單精度浮點數。該範圍為 1.40129846432481707e-45 至 3.40282346638528860e+38,正極或負極。float 遵循浮點數運算的 IEEE 標準 (IEEE 754)。等同於 Prestor 中的 real。在 Athena 中,請使用 DDL 陳述式中的 float,例如 CREATE TABLE,以及 SQL 函數中的 real,例如 SELECT CAST。 AWS Glue 爬蟲程式會傳回中的值float,而 Athena 會在內部進行翻譯real和輸float入 (請參閱2018 年 6 月 5 日版本說明)。

  • decimal [ (precision, scale) ],其中 precision 是位數的總數,scale (選用) 則是分數部分的位數總數,預設值為 0。例如,使用這些類型定義:decimal(11,5)decimal(15)。最大精確度為 38,而最大擴展值為 38。

    若要指定小數值為常值,例如在查詢 DDL 表達式中以特定小數值選取列,可指定 decimal 類型定義,並 (在單引號中) 列出小數值為常值,如同此範例中的 decimal_value = decimal '0.12'

  • char – 固定長度的字元資料,介於 1 到 255 的指定長度,例如 char(10)。如需詳細資訊,請參閱 CHAR Hive 資料類型

  • varchar – 可變長度的字元資料,介於 1 到 65535 的指定長度,例如 varchar(10)。如需詳細資訊,請參閱 VARCHAR Hive 資料類型

  • string – 用單引號或雙引號括住的字串文字。

    注意

    非字串資料類型不能轉換為 Athena 中的 string;請改將它們轉換為 varchar

  • binary – (用於 Parquet 的資料)

  • date – ISO 格式的日期,例如 YYYY-MM-DD。例如:date '2008-09-15'。OpenCSV SerDe 使用自 1970 年 1 月 1 日以來經過的天數是例外狀況。如需詳細資訊,請參閱 SerDe 用於處理 CSV 的開啟 CSV

  • timestamp – 在 java.sql.Timestamp 相容格式下的日期和時間常數,最大解析度為毫秒,例如 yyyy-MM-dd HH:mm:ss[.f...]。例如:timestamp '2008-09-15 03:04:05.324'。OpenCSV 是一個例外SerDe,它使用 UNIX 數字格式的TIMESTAMP資料 (例如,1579059880000)。如需詳細資訊,請參閱 SerDe 用於處理 CSV 的開啟 CSV

  • array < data_type >

  • map < primitive_type, data_type >

  • struct < col_name : data_type [comment col_comment] [, ...] >

[COMMENT table_comment]

建立 comment 資料表屬性,並填入您指定的 table_comment

[PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]

建立有分割區的資料表,具有包含指定的 col_namedata_typecol_comment 的一或多個分割區欄。資料表可以有一或多個分割區,各自由不同欄名稱和值組合而成。每種指定的組合都會另外建立一個資料目錄,這樣可在某些情況下改善查詢效能。資料表資料內並未包含分割資料欄。如果您使用的 col_name 值與資料表欄相同,則會發生錯誤。如需詳細資訊,請參閱分割資料

注意

在您建立分割區資料表後,執行包含 MSCK REPAIR TABLE 子句的後續查詢 (例如,MSCK REPAIR TABLE cloudfront_logs;) 以重新整理分割區中繼資料。對於與 Hive 不相容的分割區,請使用 ALTER TABLE ADD PARTITION 載入分割區,以便查詢資料。

[CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]

透過或不透過分割,將指定的 col_name 資料欄中的資料分割為稱為儲存貯體的資料子集。num_buckets 參數會指定要建立的儲存貯體數目。歸納可以改善對大型資料集的某些查詢的效能。

[ROW FORMAT row_format]

指定資料表的列格式及其基礎來源資料 (如果適用)。在 row_format 可以使用 DELIMITED 子句來指定一個或多個分隔符號,或者,使用 SERDE 子句,如下所示。如ROW FORMAT果省略或ROW FORMAT DELIMITED指定,則使 SerDe用原生。

  • [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]

  • [DELIMITED COLLECTION ITEMS TERMINATED BY char]

  • [MAP KEYS TERMINATED BY char]

  • [LINES TERMINATED BY char]

  • [NULL DEFINED AS char]

    僅適用於 Hive 0.13 及 TEXTFILE 的 STORED AS 檔案格式。

--或--

  • SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]

    serde_name示 SerDe 要使用的。子WITH SERDEPROPERTIES句可讓您提供一或多個允許的自訂內容 SerDe。

[STORED AS file_format]

指定資料表中資料的檔案格式。如果省略,TEXTFILE 為預設值。file_format 的選項有:

  • SEQUENCEFILE

  • TEXTFILE

  • RCFILE

  • ORC

  • PARQUET

  • AVRO

  • ION

  • INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

[LOCATION 's3://bucket_name/[folder]/']

指定 Amazon S3 中基礎資料的位置,資料表根據此資料建立。位置路徑必須是儲存貯體名稱或儲存貯體和一或多個資料夾。如果您使用的是分割區,請指定分割資料的根目錄。如需資料表位置的詳細資訊,請參閱 Amazon S3 中的資料表位置。如需資料格式和許可的資訊,請參閱Athena 資料表和 Amazon S3 資料的要求

為您的資料夾或儲存貯體使用尾隨斜線。請勿使用檔案名稱或 glob 字元。

使用

s3://mybucket/

s3://mybucket/folder/

s3://mybucket/folder/anotherfolder/

不要使用:

s3://path_to_bucket

s3://path_to_bucket/*

s3://path_to-bucket/mydatafile.dat

[TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='classification_value',] property_name=property_value [, ...] ) ]

除了預先定義的資料表屬性 (例如 "comment"),也為資料表定義指定自訂中繼資料鍵值組。

has_encrypted_data – Athena 有一個內建的屬性 has_encrypted_data。將此屬性設為 true,表示 LOCATION 指定的基礎資料集都會加密。如果省略且工作群組的設定不會覆寫用戶端設定,則假定為 false。如果省略或設為 false 時基礎資料有加密,查詢會導致錯誤。如需詳細資訊,請參閱 靜態加密

分類 — 在 CloudTrail 主控台中為 Athena 建立的表格會新增cloudtrailclassification屬性的值。若要執行 ETL 工作,您 AWS Glue 必須建立具有classification內容的資料表,以指出 AWS Glue 為csv、、parquetorcavro、或json的資料類型。例如:'classification'='csv'。如果您沒有指定此屬性,ETL 工作會失敗。之後,您可以使用 AWS Glue 主控台、API 或 CLI 來進行指定。如需詳細資訊,請參閱AWS Glue 開發人員指南中的使用與 AWS Glue Athena 的 ETL 工作和在 AWS Glue 中編寫工作。

compression_levelcompression_level 屬性指定要使用的壓縮級別。此屬性僅適用於 ZSTD 壓縮。可能的值為 1 到 22。預設值為 3。如需詳細資訊,請參閱 在 Athena 中使用 ZSTD 壓縮級別

如需有關其他資料表屬性的詳細資訊,請參閱 ALTER TABLE SET TBLPROPERTIES

如需建立資料表的詳細資訊,請參閱 在 Athena 中建立資料表