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
LOCATIONvorhanden ist. Verwenden Sie außer beim Erstellen von Iceberg-Tabellen immer dasEXTERNAL-Schlüsselwort. Wenn SieCREATE TABLEohne 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 ASundWITH SERDEPROPERTIESfestlegen.
- [IF NOT EXISTS]
-
Dieser Parameter prüft, ob bereits eine Tabelle mit demselben Namen vorhanden ist. Ist dies der Fall, gibt der Parameter
TRUEzurü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_namegibt die Datenbank an, in der die Tabelle gespeichert ist. Ist nichts angegeben, wird von der aktuellen Datenbank ausgegangen. Schließen Sietable_namein Anführungszeichen ein, wenn der Tabellenname Zahlen enthält, zum Beispiel"table123". Wenntable_namemit 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.
- [ ( col_name data_type [COMMENT col_comment] [, ...] ) ]
-
Gibt den Datentyp und den Namen jeder zu erstellenden Spalten an. Spaltennamen lassen außer Unterstrichen
(_)keine Sonderzeichen zu. Fallscol_namemit 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_typekann es sich um den folgenden Typ handeln:-
boolean– Die Werte sindtrueundfalse. -
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– Benutzen Sie in DDL-Abfragen (Data Definition Language) wieCREATE TABLEdasint-Schlüsselwort, um eine Ganzzahl darzustellen. Verwenden Sie in anderen Abfragen das Schlüsselwortinteger, wobeiintegerals 32-Bit-Wert mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -2^31 und einem Höchstwert von 2^31-1 dargestellt wird. Im JDBC-Treiber wirdintegerzurückgegeben, um Kompatibilität mit den geschäftlichen Analyseanwendungen zu gewährleisten. -
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 bis 1,79769313486231570e+308d, positiv oder negativ.doublefolgt dem IEEE-Standard für Gleitkommaarithmetik (IEEE 754). -
float– Eine signierte 32-Bit-Gleitkommazahl mit einfacher Genauigkeit. Der Bereich liegt zwischen 1,40129846432481707e-45 bis 3,40282346638528860e+38, positiv oder negativ.floatfolgt dem IEEE-Standard für Gleitkommaarithmetik (IEEE 754). Entspricht demrealin Presto. Verwenden Sie in Athenafloatin DDL-Anweisungen wieCREATE TABLEundrealin SQL-Funktionen wieSELECT CAST. Der AWS Glue Crawler gibt Werte in zurückfloat, und Athena übersetztrealundfloattippt 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:scaledecimal(11,5),decimal(15). Der Höchstwert fürprecisionist 38 und der Höchstwert fürscaleist 38.Um Dezimalwerte als Literale anzugeben, z. B. bei der Auswahl von Zeilen mit einem bestimmten Dezimalwert im DDL-Ausdruck einer Abfrage, legen Sie als Typdefinition
decimalfest und listen Sie die Dezimalwerte als Literalwert (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 CHAR-Hive-Datentyp. -
varchar– Zeichendaten mit variabler Länge, die zwischen 1 und 65535 Zeichen liegen muss, z. Bvarchar(10). Weitere Informationen finden Sie unter VARCHAR-Hive-Datentyp. -
string– Ein Zeichenfolgenliteral, das in einfache oder doppelte Anführungszeichen eingeschlossen ist.Anmerkung
Nicht-Zeichenfolgen-Datentypen können nicht zu
stringin Athena umgewandelt werden. Wandeln Sie sie stattdessen zuvarcharum. -
binary– (für Daten in Parquet) -
date– Ein Datum im ISO-Format, z. B.. Beispiel,YYYY-MM-DDdate '2008-09-15'. Eine Ausnahme bildet das Open CSVSer De, das die Anzahl der Tage verwendet, die seit dem 1. Januar 1970 vergangen sind. Weitere Informationen finden Sie unter CSV SerDe für die Verarbeitung von CSV öffnen. -
timestamp– Datum und Uhrzeit in einemjava.sql.Timestamp-kompatiblen Format bis zu einer maximalen Auflösung von Millisekunden, wie . Beispiel,yyyy-MM-ddHH:mm:ss[.f...]timestamp '2008-09-15 03:04:05.324'. Eine Ausnahme ist Open CSVSer De, bei demTIMESTAMPDaten im numerischen UNIX-Format verwendet werden (z. B.1579059880000). Weitere Informationen finden Sie unter CSV SerDe für die Verarbeitung von CSV öffnen. -
array< data_type > -
map< primitive_type, data_type > -
struct< col_name : data_type [COMMENT col_comment] [, ...] >
-
- [COMMENT table_comment]
-
Erstellt die Tabelleneigenschaft
commentund füllt diese mit dem von Ihnen angegebenentable_comment. - [PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]
-
Erstellt eine partitionierte Tabelle mit einer oder mehreren Partitionsspalten, bei denen
col_name,data_typeundcol_commentangegeben 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_nameverwenden, der mit einer Tabellenspalte identisch ist, erhalten Sie einen Fehler. Weitere Informationen finden Sie auf der Seite zum Partitionieren von Daten.Anmerkung
Nach dem Erstellen einer Tabelle mit Partitionen führen Sie eine weitere Abfrage aus, die aus der Klausel MSCK REPAIR TABLE besteht, um die Partitionsmetadaten aufzufrischen, beispielsweise
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.
- [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
-
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.
- [ROW FORMAT row_format]
-
Gibt das Zeilenformat der Tabelle und deren zugrunde liegenden Quelldaten an, wenn zutreffend. Für
row_formatkönnen Sie mit der KlauselDELIMITEDein oder mehrere Trennzeichen angeben, oder alternativ die KlauselSERDEverwenden, wie unten beschrieben. WennROW FORMATes weggelassen oder angegebenROW FORMAT DELIMITEDist, wird ein SerDe systemeigener Wert verwendet.-
[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]
Nur mit Hive 0.13 verfügbar und wenn das STORED AS-Dateiformat
TEXTFILEist.
--ODER--
-
SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]
Das
serde_namegibt an SerDe , dass es verwendet werden soll. DieWITH SERDEPROPERTIESKlausel ermöglicht es Ihnen, eine oder mehrere benutzerdefinierte Eigenschaften anzugeben, die gemäß der zulässig sind SerDe.
-
- [STORED AS Dateiformat]
-
Gibt das Dateiformat für Tabellendaten an. Wenn nichts angegeben ist, wird standardmäßig
TEXTFILEverwendet. Optionen fürfile_formatsind:-
SEQUENCEFILE
-
TEXTFILE
-
RCFILE
-
ORC
-
PARQUET
-
AVRO
-
ION
-
INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
-
- [STANDORT 's3://amzn-s3-demo-bucket/[folder]/']
-
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-buckets3://amzn-s3-demo-bucket/*s3://amzn-s3-demo-bucket/mydatafile.dat - [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['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 durchLOCATIONfestgelegt ist, verschlüsselt ist. Wenn dies ausgelassen wird und die Einstellungen der Arbeitsgruppe clientseitige Einstellungen nicht überschreiben, wirdfalseangenommen. Wenn nichts angegeben oder die Eigenschaft auffalsegesetzt 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
cloudtrailals Wert für dieclassificationEigenschaft hinzugefügt. Um ETL-Jobs auszuführen, AWS Glue müssen Sie eine Tabelle mit derclassificationEigenschaft erstellen, den Datentyp für AWS Glue ascsv,,parquetorcavro, oderjsonanzugeben. Beispiel,'classification'='csv'. ETL-Aufträge schlagen fehl, wenn Sie diese Eigenschaft nicht festlegen. Sie können diese nachträglich über AWS Glue -Konsole, die API oder die CLI angeben. 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_levelgibt 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 DELIMITEDKlausel 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 TEXTFILEKlausel 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.