Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CREATE TABLE
Erstellt eine Tabelle mit dem Namen und den Parametern, den bzw. die Sie angeben.
Anmerkung
Diese Seite enthält zusammenfassende Referenzinformationen. Weitere Informationen zum Erstellen von Tabellen in Athena und ein Beispiel für eine CREATE TABLE
-Anweisung finden Sie unter Erstellen Sie Tabellen in Athena. Für ein Beispiel für das Erstellen einer Datenbank, das Erstellen einer Tabelle und das Ausführen einer SELECT
-Abfrage auf dem Tisch in Athena siehe Erste Schritte.
Syntax
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 [, ...] ) ]
Parameter
- EXTERNAL
-
Gibt an, dass die Tabelle auf einer Datendatei basiert, die in Amazon S3 an dem von Ihnen angegebenen
LOCATION
vorhanden ist. Verwenden Sie außer beim Erstellen von Iceberg-Tabellen immer dasEXTERNAL
-Schlüsselwort. Wenn SieCREATE TABLE
ohne dasEXTERNAL
-Schlüsselwort für Nicht-Iceberg-Tabellen verwenden, gibt Athena einen Fehler aus. Wenn Sie eine externe Tabelle erstellen, müssen die referenzierten Daten mit dem Standardformat oder dem Format übereinstimmen, das Sie über die KlauselnROW FORMAT
,STORED AS
undWITH SERDEPROPERTIES
festlegen.
- [WENN NOTEXISTS]
-
Dieser Parameter prüft, ob bereits eine Tabelle mit demselben Namen vorhanden ist. Ist dies der Fall, gibt der Parameter
TRUE
zurück und Amazon Athena bricht dieCREATE TABLE
-Aktion ab. Da die Stornierung erfolgt, bevor Athena den Datenkatalog aufruft, wird kein AWS CloudTrail Ereignis ausgegeben. - [db_name.]table_name
-
Gibt einen Namen für die zu erstellende Tabelle an. Der optionale Parameter
db_name
gibt die Datenbank an, in der die Tabelle gespeichert ist. Ist nichts angegeben, wird von der aktuellen Datenbank ausgegangen. Schließen Sietable_name
in Anführungszeichen ein, wenn der Tabellenname Zahlen enthält, zum Beispiel"table123"
. Wenntable_name
mit einem Unterstrich beginnt, verwenden Sie Backticks, beispielsweise`_mytable`
. Sonderzeichen (außer Unterstriche) werden nicht unterstützt.Bei Athena-Tabellennamen wird die Groß-/Kleinschreibung berücksichtigt. Wenn Sie mit Apache Spark arbeiten, beachten Sie, dass Spark Tabellennamen in Kleinbuchstaben erfordert. Einschränkungen für Tabellennamen in Athena finden Sie unterDatenbanken, Tabellen und Spalten benennen.
- [(Spaltenname Datentyp [COMMENTSpaltenkommentar] [,...])]
-
Gibt den Datentyp und den Namen jeder zu erstellenden Spalten an. Spaltennamen lassen außer Unterstrichen
(_)
keine Sonderzeichen zu. Fallscol_name
mit einem Unterstrich beginnt, schließen Sie den Spaltennamen in Backticks ein, beispielsweise`_mycolumn`
. Einschränkungen für Spaltennamen in Athena finden Sie unterDatenbanken, Tabellen und Spalten benennen.Beim Wert
data_type
kann es sich um den folgenden Typ handeln:-
boolean
– Die Werte sindtrue
undfalse
. -
tinyint
– Eine 8-Bit signierte Ganzzahl im Zweierkomplement-Format mit einem Mindestwert von -2^7 und einem Höchstwert von 2^7-1. -
smallint
– Eine 16-Bit signierte Ganzzahl im Zweierkomplement-Format mit einem Mindestwert von -2^15 und einem Höchstwert von 2^15-1. -
int
— Verwenden Sie in Abfragen in Data Definition Language (DDL) wie z. B. dasint
SchlüsselwortCREATE TABLE
, um eine Ganzzahl darzustellen. Verwenden Sie in anderen Abfragen das Schlüsselwortinteger
, wobeiinteger
als 32-Bit-Wert mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -2^31 und einem Höchstwert von 2^31-1 dargestellt wird. Wird im JDBC Treiber zurückgegeben,integer
um die Kompatibilität mit Geschäftsanalyseanwendungen sicherzustellen. -
bigint
– Eine 64-Bit signierte Ganzzahl im Zweierkomplement-Format mit einem Mindestwert von -2^63 und einem Höchstwert von 2^63-1. -
double
– Eine signierte 64-Bit-Gleitkommazahl mit doppelter Genauigkeit. Der Bereich liegt zwischen 4,94065645841246544e-324d und 1,79769313486231570e+308d, positiv oder negativ.double
IEEEfolgt dem Standard für Gleitkomma-Arithmetik (754). IEEE -
float
– Eine signierte 32-Bit-Gleitkommazahl mit einfacher Genauigkeit. Der Bereich liegt zwischen 1,40129846432481707e-45 und 3,40282346638528860e+38, positiv oder negativ.float
IEEEfolgt dem Standard für Gleitkomma-Arithmetik (754). IEEE Entspricht demreal
in Presto. Verwenden Sie in Athenafloat
in DDL Anweisungen wieCREATE TABLE
undreal
in SQL Funktionen wieSELECT CAST
. Der AWS Glue Crawler gibt Werte in zurückfloat
, und Athena übersetztreal
undfloat
tippt intern (siehe 5. Juni 2018 Versionshinweise). -
decimal [ (
, wobeiprecision
,scale
) ]
die Gesamtanzahl der Stellen undprecision
(optional) die Anzahl der Nachkommastellen ist. Der Standardwert ist 0. Verwenden Sie z. B. diese Definitionen:scale
decimal(11,5)
,decimal(15)
. Der Höchstwert fürprecision
ist 38 und der Höchstwert fürscale
ist 38.Um Dezimalwerte als Literale anzugeben, z. B. wenn Sie Zeilen mit einem bestimmten Dezimalwert in einem DDL Abfrageausdruck auswählen, geben Sie die
decimal
Typdefinition an und listen Sie den Dezimalwert als Literal (in einfachen Anführungszeichen) in Ihrer Abfrage auf, wie in diesem Beispiel:.decimal_value = decimal '0.12'
-
char
– Zeichendaten mit fester Länge, die zwischen 1 und 255 Zeichen liegen muss, z. Bchar(10)
. Weitere Informationen finden Sie unter CHARHive-Datentyp. -
varchar
– Zeichendaten mit variabler Länge, die zwischen 1 und 65535 Zeichen liegen muss, z. Bvarchar(10)
. Weitere Informationen finden Sie unter VARCHARHive-Datentyp. -
string
– Ein Zeichenfolgenliteral, das in einfache oder doppelte Anführungszeichen eingeschlossen ist.Anmerkung
Nicht-Zeichenfolgen-Datentypen können nicht zu
string
in Athena umgewandelt werden. Wandeln Sie sie stattdessen zuvarchar
um. -
binary
– (für Daten in Parquet) -
date
— Ein Datum im ISO Format, z. B.
Beispiel,YYYY
-MM
-DD
date '2008-09-15'
. Eine Ausnahme ist das O penCSVSer De, das die Anzahl der Tage verwendet, die seit dem 1. Januar 1970 vergangen sind. Weitere Informationen finden Sie unter CSV SerDe Zur Bearbeitung geöffnet CSV. -
timestamp
– Datum und Uhrzeit in einemjava.sql.Timestamp
-kompatiblen Format bis zu einer maximalen Auflösung von Millisekunden, wie
. Beispiel,yyyy
-MM
-dd
HH
:mm
:ss
[.f...
]timestamp '2008-09-15 03:04:05.324'
. Eine Ausnahme ist das O penCSVSer De, dasTIMESTAMP
Daten im UNIX numerischen Format verwendet (z. B.1579059880000
). Weitere Informationen finden Sie unter CSV SerDe Zur Bearbeitung geöffnet CSV. -
array
< data_type > -
map
< primitive_type, data_type > -
struct
< col_name : data_type [COMMENT col_comment] [, ...] >
-
- [COMMENTTabellenkommentar]
-
Erstellt die Tabelleneigenschaft
comment
und füllt diese mit dem von Ihnen angegebenentable_comment
. - [PARTITIONEDVON (Spaltenname Datentyp [Spaltenkommentar],...)] COMMENT
-
Erstellt eine partitionierte Tabelle mit einer oder mehreren Partitionsspalten, bei denen
col_name
,data_type
undcol_comment
angegeben sind. Eine Tabelle kann eine oder mehrere Partitionen umfassen. Diese bestehen aus einem eindeutigen Spaltennamen und einer Wertekombination. Für jede angegebene Kombination wird ein eigenes Datenverzeichnis erstellt. Dies kann die Abfrageleistung in einigen Fällen verbessern. In den Tabellendaten selbst sind keine partitionierten Spalten vorhanden. Wenn Sie einen Wert fürcol_name
verwenden, der mit einer Tabellenspalte identisch ist, erhalten Sie einen Fehler. Weitere Informationen finden Sie auf der Seite zum Partitionieren von Daten.Anmerkung
Nachdem Sie eine Tabelle mit Partitionen erstellt haben, führen Sie eine nachfolgende Abfrage aus, die aus der MSCKREPAIRTABLEKlausel zum Aktualisieren der Partitionsmetadaten besteht, z. B.
MSCK REPAIR TABLE cloudfront_logs;
Verwenden Sie für Partitionen, die nicht Hive-kompatibel sind, ALTER TABLE ADD PARTITION zum Laden von Partitionen, sodass Sie die Daten abfragen können.
- [CLUSTEREDBY (Spaltenname, Spaltenname,...) INTOBUCKETSAnzahl_Eimer]
-
Unterteilt die Daten in den angegebenen
col_name
-Spalten mit oder ohne Partitionierung in Datenteilmengen, die als Buckets bezeichnet werden. Dernum_buckets
-Parameter gibt die Anzahl der zu erstellenden Buckets an. Bucketing kann die Leistung einiger Abfragen auf großen Datensätzen verbessern.
- [Zeilenformat] ROW FORMAT
-
Gibt das Zeilenformat der Tabelle und deren zugrunde liegenden Quelldaten an, wenn zutreffend. Für
row_format
können Sie mit der KlauselDELIMITED
ein oder mehrere Trennzeichen angeben, oder alternativ die KlauselSERDE
verwenden, wie unten beschrieben. WennROW FORMAT
es weggelassen oder angegebenROW FORMAT DELIMITED
ist, SerDe wird ein systemeigener Wert verwendet.-
[DELIMITEDFIELDSTERMINATEDVON char [ESCAPEDVON char]]
-
[DELIMITEDCOLLECTIONITEMSTERMINATEDVON char]
-
[MAPKEYSTERMINATEDVON char]
-
[LINESTERMINATEDVON char]
-
[NULLDEFINEDALS Zeichen]
Nur mit Hive 0.13 verfügbar und wenn das STORED AS-Dateiformat ist.
TEXTFILE
--ODER--
-
SERDE'serde_name' [WITHSERDEPROPERTIES(„property_name“ = „property_value“, „property_name“ = „property_value“ [,...])]
serde_name
Das SerDe gibt an, was verwendet werden soll. DieWITH SERDEPROPERTIES
Klausel ermöglicht es Ihnen, eine oder mehrere benutzerdefinierte Eigenschaften anzugeben, die gemäß der zulässig sind SerDe.
-
- [STOREDALS Dateiformat]
-
Gibt das Dateiformat für Tabellendaten an. Wenn nichts angegeben ist, wird standardmäßig
TEXTFILE
verwendet. Optionen fürfile_format
sind:-
SEQUENCEFILE
-
TEXTFILE
-
RCFILE
-
ORC
-
PARQUET
-
AVRO
-
ION
-
INPUTFORMATEingabeformat_Klassenname Ausgabeformat_Klassenname OUTPUTFORMAT
-
- ['s3://amzn-s3-demo-bucket/[folder]/LOCATION']
-
Gibt den Speicherort der zugrunde liegenden Daten in Amazon S3 an, aus denen die Tabelle erstellt wurde. Der Speicherpfad muss ein Bucket-Name oder ein Bucket-Name sowie ein oder mehrere Ordner sein. Wenn Sie Partitionen verwenden, geben Sie den Stamm der partitionierten Daten an. Weitere Informationen zum Speicherort der Tabelle finden Sie unter Geben Sie einen Tabellenstandort in Amazon S3 an. Weitere Informationen zum Datenformat und zu den Berechtigungen finden Sie unter Überlegungen zu Amazon S3.
Verwenden Sie einen abschließenden Schrägstrich für Ihren Ordner oder Bucket. Verwenden Sie keine Dateinamen oder glob-Zeichen.
Verwenden:
s3://amzn-s3-demo-bucket/
s3://amzn-s3-demo-bucket/
folder
/s3://amzn-s3-demo-bucket/
folder
/anotherfolder
/Verwenden Sie nicht:
s3://amzn-s3-demo-bucket
s3://amzn-s3-demo-bucket/*
s3://amzn-s3-demo-bucket/
mydatafile.dat
- [TBLPROPERTIES['has_encrypted_data'='wahr | falsch',] ['classification'='classification_value',] property_name=property_value [,...])]
-
Gibt zusätzlich zu den vordefinierten Tabelleneigenschaften wie
"comment"
benutzerdefinierte Schlüssel/Wert-Paare in Form von Metadaten für die Tabellendefinition an.has_encrypted_data – Athena verfügt über eine integrierte Eigenschaft,
has_encrypted_data
. Setzen Sie diese Eigenschaft auftrue
, um anzugeben, dass das zugrunde liegende Dataset, das durchLOCATION
festgelegt ist, verschlüsselt ist. Wenn dies ausgelassen wird und die Einstellungen der Arbeitsgruppe clientseitige Einstellungen nicht überschreiben, wirdfalse
angenommen. Wenn nichts angegeben oder die Eigenschaft auffalse
gesetzt ist, schlägt die Abfrage fehl, wenn die zugrunde liegenden Daten verschlüsselt sind. Weitere Informationen finden Sie unter Verschlüsselung im Ruhezustand.Klassifizierung — Tabellen, die für Athena in der CloudTrail Konsole erstellt wurden, werden
cloudtrail
als Wert für dieclassification
Eigenschaft hinzugefügt. Um ETL Jobs auszuführen, AWS Glue müssen Sie eine Tabelle mit derclassification
Eigenschaft erstellen, den Datentyp für AWS Glue ascsv
,,parquet
orc
avro
, oderjson
anzugeben. Beispiel,'classification'='csv'
. ETLJobs schlagen fehl, wenn Sie diese Eigenschaft nicht angeben. Sie können sie anschließend mit der AWS Glue KonsoleAPI, oder angebenCLI. Weitere Informationen finden Sie unter Tabellen für ETL Jobs erstellen und Authoring Jobs in AWS Glue im AWS Glue Developer Guide.compression_level – Die Eigenschaft
compression_level
gibt die zu verwendende Komprimierungsstufe an. Diese Eigenschaft gilt nur für die ZSTD Komprimierung. Mögliche Werte liegen zwischen 1 und 22. Der Standardwert ist 3. Weitere Informationen finden Sie unter Verwenden Sie ZSTD Kompressionsstufen.Weitere Informationen zu anderen Tabelleneigenschaften finden Sie unter ALTER TABLE SET TBLPROPERTIES.
Beispiele
Die folgende CREATE TABLE
Beispielanweisung erstellt eine Tabelle, die auf tabulatorgetrennten Planetendaten basiert, die in Amazon S3 gespeichert sind.
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/'
Beachten Sie folgende Punkte:
-
Die
ROW FORMAT DELIMITED
Klausel gibt an, dass die Daten durch ein bestimmtes Zeichen begrenzt sind. -
Die
FIELDS TERMINATED BY '\t'
Klausel gibt an, dass die Felder in den TSV Daten durch das Tabulatorzeichen ('\ t') getrennt sind. -
Die
STORED AS TEXTFILE
Klausel gibt an, dass die Daten als Klartextdateien in Amazon S3 gespeichert werden.
Um die Daten abzufragen, könnten Sie eine einfache SELECT
Anweisung wie die folgende verwenden:
SELECT * FROM planet_data
Um das Beispiel zu verwenden, um Ihre eigene TSV Tabelle in Athena zu erstellen, ersetzen Sie die Tabellen- und Spaltennamen durch die Namen und Datentypen Ihrer eigenen Tabelle und Spalten und aktualisieren Sie die LOCATION
Klausel so, dass sie auf den Amazon S3 S3-Pfad verweist, in dem Ihre TSV Dateien gespeichert sind.
Weitere Informationen zum Erstellen von Tabellen finden Sie unter Erstellen Sie Tabellen in Athena.