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]

如果名為 table_name 的資料表已存在,會造成錯誤訊息隱藏。

[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 會在內部轉譯 realfloat 類型 (請參閱 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'。一個例外是 OpenCSVSerDe,它使用自 1970 年 1 月 1 日以來經過的天數。如需詳細資訊,請參閱 用於處理 CSV 的 OpenCSVSerDe

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

  • 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'='aws_glue_classification',] property_name=property_value [, ...] ) ]

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

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

若要執行 ETL 工作,AWS Glue 需要您建立含 classification 屬性的資料表,以指示 AWS Glue 的資料類型為 csvparquetorcavrojson。例如,'classification'='csv'。如果您沒有指定此屬性,ETL 工作會失敗。之後,您可以使用 AWS Glue 主控台、API 或 CLI 來進行指定。如需詳細資訊,請參閱 搭配 Athena 使用 AWS Glue ETL 任務《AWS Glue 開發人員指南》中的在 AWS Glue 中授權任務

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