本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 FORMAT
、STORED AS
及WITH 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
– 值為true
和false
。 -
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
。在 Athenafloat
中,在 等DDL陳述式CREATE TABLE
和 等SQL函數real
中使用SELECT CAST
。 AWS Glue 爬蟲程式會傳回 中的值float
,而 Athena 會在內部翻譯real
和float
輸入 (請參閱2018 年 6 月 5 日版本備註)。 -
decimal [ (
,其中precision
,scale
) ]
是位數的總數,precision
(選用) 則是分數部分的位數總數,預設值為 0。例如,使用這些類型定義:scale
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_name
、data_type
、col_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 為csv
、parquet
、orc
、avro
或json
。例如:'classification'='csv'
。ETL 如果您未指定此屬性,任務將會失敗。您隨後可以使用主控台、 API或 來指定它 AWS Glue CLI。如需詳細資訊,請參閱 AWS Glue 開發人員指南 中的為ETL工作建立表格在 AWS Glue 中編寫任務。compression_level –
compression_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 建立表格。