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://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 子句指定的格式。

【如果 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遵循 Floating-Point Arithmetic IEEE標準 (IEEE 754)。

  • float – 32 位元單精度浮點數。範圍為 1.40129846432481707e-45 至 3.40282346638528860e+38,正或負。 float遵循 Floating-Point Arithmetic IEEE標準 (IEEE 754)。等同於 Prestor 中的 real。在 Athena float中,在 等DDL陳述式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)。的最大值 precision 為 38,且 的最大值為 scale 是 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'。例外是 O penCSVSerDe,它使用自 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'。例外是 O penCSVSerDe,它使用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 值與資料表欄相同,則會發生錯誤。如需詳細資訊,請參閱分割資料

注意

使用分割區建立資料表後,請執行後續查詢,其中包含 MSCKREPAIRTABLE子句以重新整理分割區中繼資料,例如 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 字元 【ESCAPED BY 字元】】

  • 【DELIMITED COLLECTION ITEMS TERMINATED BY 字元】

  • 【MAP KEYS TERMINATED BY 字元】

  • 【LINES TERMINATED BY 字元】

  • 【NULL DEFINED AS 字元】

    僅適用於 Hive 0.13 和 STORED AS 檔案格式為 時。 TEXTFILE

--或--

  • 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任務, AWS Glue 會要求您使用 classification 屬性建立資料表,以將 的資料類型指定 AWS Glue 為 csvparquetorcavrojson。例如:'classification'='csv'。ETL 如果您未指定此屬性,任務將會失敗。您隨後可以使用主控台、 API或 來指定它 AWS Glue 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 建立表格