選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

CREATE TABLE

焦點模式
CREATE TABLE - Amazon Athena

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

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

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

注意

此頁包含摘要參考資訊。如需在 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://amzn-s3-demo-bucket/[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 的資料表名稱需為小寫字母。如需 Athena 中資料表名稱的限制,請參閱 命名資料庫、資料表和資料欄

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

指定要建立的每一欄名稱以及欄的資料類型。欄名稱不可使用底線 (_) 以外的特殊字元。如果 col_name 以底線開頭,以反引號括住欄名稱,例如 `_mycolumn`。如需 Athena 中資料欄名稱的限制,請參閱 命名資料庫、資料表和資料欄

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 SerDe 以處理 CSV

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

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

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

使用

s3://amzn-s3-demo-bucket/

s3://amzn-s3-demo-bucket/folder/

s3://amzn-s3-demo-bucket/folder/anotherfolder/

不要使用:

s3://amzn-s3-demo-bucket

s3://amzn-s3-demo-bucket/*

s3://amzn-s3-demo-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 建立的資料表新增 cloudtrail 做為 classification 屬性的值。若要執行 ETL parquet任務, AWS Glue 會要求您使用 classification 屬性建立資料表,以將 的資料類型指定 AWS Glue 為 csv、、orcavrojson。例如:'classification'='csv'。如果您沒有指定此屬性,ETL 工作會失敗。之後,您可以使用 AWS Glue 主控台、API 或 CLI 來進行指定。如需詳細資訊,請參閱《 AWS Glue 開發人員指南》中的建立 ETL 任務的資料表AWS Glue 中編寫任務

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

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

範例

下列範例CREATE TABLE陳述式會根據存放在 Amazon S3 中的標籤分隔行星資料建立資料表。

CREATE EXTERNAL TABLE planet_data ( planet_name string, order_from_sun int, au_to_sun float, mass float, gravity_earth float, orbit_years float, day_length float ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/tsv/'

請注意以下重點:

  • ROW FORMAT DELIMITED 子句指出資料以特定字元分隔。

  • FIELDS TERMINATED BY '\t' 子句指定 TSV 資料中的欄位以標籤字元 ('\t') 分隔。

  • STORED AS TEXTFILE 子句指出資料會以純文字檔案的形式儲存在 Amazon S3 中。

若要查詢資料,您可以使用簡單的SELECT陳述式,如下所示:

SELECT * FROM planet_data

若要使用 範例在 Athena 中建立自己的 TSV 資料表,請將資料表和資料欄名稱取代為您自己的資料表和資料欄的名稱和資料類型,然後更新LOCATION子句以指向存放 TSV 檔案的 Amazon S3 路徑。

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

在本頁面

下一個主題:

CREATE TABLE AS

上一個主題:

CREATE DATABASE
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。