CREATE TABLE - Amazon Athena

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 von 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 das EXTERNAL-Schlüsselwort. Wenn Sie CREATE TABLE ohne das EXTERNAL-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 Klauseln ROW FORMAT, STORED AS und WITH SERDEPROPERTIES festlegen.

[IF NOT EXISTS]

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 die CREATE TABLE-Aktion ab. Da ein Abbruch 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 Sie table_name in Anführungszeichen ein, wenn der Tabellenname Zahlen enthält, zum Beispiel "table123". Wenn table_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 unter Namen für Datenbanken, Tabellen und Spalten.

[ ( 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 (_). Falls col_name mit einem Unterstrich beginnt, schließen Sie den Spaltennamen in Backticks ein, beispielsweise `_mycolumn`. Einschränkungen für Spaltennamen in Athena finden Sie unter Namen für Datenbanken, Tabellen und Spalten.

Beim Wert data_type kann es sich um den folgenden Typ handeln:

  • boolean – Die Werte sind true und false.

  • 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) wie CREATE TABLE das int-Schlüsselwort, um eine Ganzzahl darzustellen. Verwenden Sie in anderen Abfragen das Schlüsselwort integer, wobei integer als 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 wird integer zurü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. double folgt 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. float folgt dem IEEE-Standard für Gleitkommaarithmetik (IEEE 754). Entspricht dem real in Presto. Verwenden Sie in Athena float in DDL-Anweisungen wie CREATE TABLE und real in SQL-Funktionen wie SELECT CAST. Der AWS Glue-Crawler gibt Werte in float zurück und Athena übersetzt die Typen real und float intern (siehe 5. Juni 2018-Versionshinweise).

  • decimal [ (precision, scale) ], wobei precision die Gesamtanzahl der Stellen und scale (optional) die Anzahl der Nachkommastellen ist. Der Standardwert ist 0. Verwenden Sie z. B. diese Definitionen: decimal(11,5), decimal(15). Die maximale Wert der Genauigkeit ist 38 und der maximale Wert für die Skalierung beträgt 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 decimal fest 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. B char(10). Weitere Informationen finden Sie unter CHAR-Hive-Datentyp.

  • varchar – Zeichendaten mit variabler Länge, die zwischen 1 und 65535 Zeichen liegen muss, z. B varchar(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 string in Athena umgewandelt werden. Wandeln Sie sie stattdessen zu varchar um.

  • binary – (für Daten in Parquet)

  • date – Ein Datum im ISO-Format, z. B YYYY-MM-DD. Beispiel, date '2008-09-15'. Eine Ausnahme ist der OpenCSVSerDe, der die Anzahl der Tage verwendet, die seit dem 1. Januar 1970 verstrichen sind. Weitere Informationen finden Sie unter Open CSVSer De für CSV-Verarbeitung.

  • timestamp– Datum und Uhrzeit in einem java.sql.Timestamp-kompatiblen Format bis zu einer maximalen Auflösung von Millisekunden, wie yyyy-MM-dd HH:mm:ss[.f...]. Beispiel, timestamp '2008-09-15 03:04:05.324'. Eine Ausnahme ist der OpenCSVSerde, der TIMESTAMP-Daten im numerischen UNIX-Format (z. B. 1579059880000) enthält. Weitere Informationen finden Sie unter Open CSVSer De für CSV-Verarbeitung.

  • array < data_type >

  • map < primitive_type, data_type >

  • struct < col_name : data_type [COMMENT col_comment] [, ...] >

[COMMENT table_comment]

Erstellt die Tabelleneigenschaft comment und füllt diese mit dem von Ihnen angegebenen table_comment.

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

Erstellt eine partitionierte Tabelle mit einer oder mehreren Partitionsspalten, bei denen col_name, data_type und col_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ür col_name verwenden, 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. Der num_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_format können Sie mit der Klausel DELIMITED ein oder mehrere Trennzeichen angeben, oder alternativ die Klausel SERDE verwenden, wie unten beschrieben. Wenn ROW FORMAT ausgelassen wurde oder ROW FORMAT DELIMITED angegeben ist, wird ein nativer SerDe 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 ist TEXTFILE.

--ODER--

  • SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]

    serde_name gibt den zu verwendenden SerDe an. Die Klausel WITH SERDEPROPERTIES ermöglicht Ihnen, eine oder mehrere benutzerdefinierte Eigenschaften bereitzustellen, die vom SerDe unterstützt werden.

[STORED AS Dateiformat]

Gibt das Dateiformat für Tabellendaten an. Wenn nichts angegeben ist, wird standardmäßig TEXTFILE verwendet. Optionen für file_format sind:

  • SEQUENCEFILE

  • TEXTFILE

  • RCFILE

  • ORC

  • PARQUET

  • AVRO

  • ION

  • INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

[LOCATION '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 Tabellenspeicherort in Amazon S3 angeben. Weitere Informationen zum Datenformat und zu den Berechtigungen finden Sie unter Überlegungen hinsichtlich Amazon S3.

Verwenden Sie einen abschließenden Schrägstrich für Ihren Ordner oder Bucket. Verwenden Sie keine Dateinamen oder glob-Zeichen.

Verwenden Sie:

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'='true | false',] ['classification'='classification_value',] property_name=property_value [, ...] ) ]

Gibt zusätzlich zu den vordefinierten Tabelleneigenschaften wie benutzerdefinierte Schlüssel/Wert-Paare in Form von Metadaten für die Tabellendefinition an "comment".

has_encrypted_data – Athena verfügt über eine integrierte Eigenschaft, has_encrypted_data. Setzen Sie diese Eigenschaft auf true, um anzugeben, dass das zugrunde liegende Dataset, das durch LOCATION festgelegt ist, verschlüsselt ist. Wenn dies ausgelassen wird und die Einstellungen der Arbeitsgruppe clientseitige Einstellungen nicht überschreiben, wird false angenommen. Wenn nichts angegeben oder die Eigenschaft auf false gesetzt ist, schlägt die Abfrage fehl, wenn die zugrunde liegenden Daten verschlüsselt sind. Weitere Informationen finden Sie unter Verschlüsselung im Ruhezustand.

classification – Tabellen, die für Athena in der CloudTrail-Konsole erstellt wurden, fügen cloudtrail als einen Wert für die Eigenschaft classification hinzu. Zum Ausführen von ETL-Aufträgen erfordert AWS Glue das Erstellen einer Tabelle mit der classification-Eigenschaft, um den Datentyp für AWS Glue als csv, parquet, orc, avro oder json festzulegen. 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-Aufträge erstellen und Autorisieren von Aufträgen in AWS Glue im AWS Glue-Entwicklerhandbuch.

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 ZSTD-Komprimierungsstufen verwenden.

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 getrennt 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 reine Textdateien 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 zum Erstellen Ihrer eigenen TSV-Tabelle in Athena zu verwenden, 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-Pfad verweist, in dem Ihre TSV-Dateien gespeichert sind.

Weitere Informationen zum Erstellen von Tabellen finden Sie unter Erstellen von Tabellen in Athena.