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.
Datentypen in Amazon Athena
Beim Ausführen CREATE TABLE
geben Sie Spaltennamen und den Datentyp an, den jede Spalte enthalten kann. Die Tabellen, die Sie erstellen, werden in der gespeichert AWS Glue Data Catalog.
Um die Interoperabilität mit anderen Abfrage-Engines zu erleichtern, verwendet Athena Apache Hive-DatentypnamenCREATE TABLE
Für DML-Abfragen wie SELECT
CTAS
INSERT INTO
, und verwendet Athena Trino-Datentypnamen
DDL | DML | Beschreibung |
---|---|---|
BOOLEAN | Die Werte sind true und false . |
|
TINYINT | Eine 8-Bit-Ganzzahl mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -2 7 und einem Höchstwert von 2 7 -1. | |
SMALLINT | Eine 16-Bit-Ganzzahl mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -2 15 und einem Höchstwert von 2 15 -1. | |
INT, INTEGER | Ein 32-Bit-Wert mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -2 31 und einem Höchstwert von 2 31 -1. | |
BIGINT | Eine 64-Bit-Ganzzahl mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -2 63 und einem Höchstwert von 2 63 -1. | |
FLOAT | REAL | Eine 32-Bit-Gleitkommazahl mit Vorzeichen und einfacher Genauigkeit. Der Bereich liegt zwischen 1,40129846432481707e-45 und 3,40282346638528860e+38, positiv oder negativ. Entspricht dem IEEE-Standard für Gleitkomma-Arithmetik (IEEE 754). |
DOUBLE | Eine 64-Bit-Gleitkommazahl mit Vorzeichen und doppelter Genauigkeit. Der Bereich reicht von 4,94065645841246544e-324d bis 1,79769313486231570e+308d, positiv oder negativ. Entspricht dem IEEE-Standard für Gleitkomma-Arithmetik (IEEE 754). | |
(Genauigkeit, Skala) |
ist die Gesamtzahl der Ziffern. (optional) ist die Anzahl der Ziffern in Nachkommastellen mit dem Standardwert 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. |
|
CHAR, CHAR (Länge ) |
Zeichendaten mit fester Länge und einer angegebenen Länge zwischen 1 und 255, z. B. char (10). Wenn eine Weitere Informationen finden Sie unter CHAR-Hive-Datentyp |
|
STRING | VARCHAR | Zeichendaten mit variabler Länge. |
VARCHAR (Länge) |
Zeichendaten variabler Länge mit einer maximalen Leselänge. Zeichenketten werden beim Lesen auf die angegebene Länge gekürzt. Wenn die zugrunde liegende Datenzeichenfolge länger ist, bleibt die zugrunde liegende Datenzeichenfolge unverändert. | |
BINARY | VARBINARY | Binärdaten mit variabler Länge. |
TIME | Eine Tageszeit mit Millisekundengenauigkeit. | |
Nicht verfügbar | ZEIT (Genauigkeit) |
Eine Tageszeit mit einer bestimmten Genauigkeit. TIME(3) ist gleichwertig mitTIME . |
Nicht verfügbar | TIME WITH TIME ZONE | Eine Tageszeit in einer Zeitzone. Zeitzonen sollten als Offsets von UTC angegeben werden. |
DATUM | Ein Kalenderdatum mit Jahr, Monat und Tag. | |
TIMESTAMP (ZEITSTEMPEL) | ZEITSTEMPEL, ZEITSTEMPEL OHNE ZEITZONE | Ein Kalenderdatum und eine Uhrzeit mit Millisekundengenauigkeit. |
Nicht verfügbar | TIMESTAMP ( |
Ein Kalenderdatum und eine Uhrzeit mit einer bestimmten Genauigkeit. TIMESTAMP(3) entsprichtTIMESTAMP . |
Nicht verfügbar | TIMESTAMP WITH TIME ZONE | Ein Kalenderdatum und eine Uhrzeit in einer Zeitzone. Zeitzonen können als Abweichungen von UTC, als IANA-Zeitzonennamen oder mit UTC, UT, Z oder GMT angegeben werden. |
Nicht verfügbar | ZEITSTEMPEL (PRÄZISION ) MIT ZEITZONE |
Ein Kalenderdatum und eine Uhrzeit mit einer bestimmten Genauigkeit in einer Zeitzone. |
Nicht verfügbar | INTERVAL YEAR TO MONTH | Ein Intervall von einem oder mehreren ganzen Monaten |
Nicht verfügbar | INTERVAL DAY TO SECOND | Ein Intervall von einer oder mehreren Sekunden, Minuten, Stunden oder Tagen |
ARRAY< element_type > |
ARRAY [Elementtyp] |
Ein Array von Werten. Alle Werte müssen denselben Typ haben. |
MAP< |
|
Eine Map, in der Werte nach Schlüsseln gesucht werden können. Alle Schlüssel müssen denselben Wert haben und alle Werte müssen denselben Wert haben. |
|
ROW (Feldname_1 , Feldname_2 Feldtyp_2, |
Eine Datenstruktur mit benannten Feldern und ihren Werten. |
Nicht verfügbar | JSON | JSON-Wertetyp, bei dem es sich um ein JSON-Objekt, ein JSON-Array, eine JSON-Nummer, eine JSON-Zeichenfolge false oder handeln kannnull . true |
Nicht verfügbar | UUID | Eine UUID (Universally Unique IDentifier). |
Nicht verfügbar | IP-ADRESSE | Eine IPv4- oder IPv6-Adresse. |
Nicht verfügbar | HyperLogLog |
Diese Datentypen unterstützen ungefähre Funktionsinterna. Weitere Informationen zu den einzelnen Typen finden Sie unter dem Link zum entsprechenden Eintrag in der Trino-Dokumentation. |
P4 HyperLogLog |
||
SetDigest |
||
Q Digest |
||
TDigest |
Beispiele für Datentypen
Die folgende Tabelle zeigt Beispielliterale für DML-Datentypen.
Datentyp | Beispiele |
---|---|
BOOLEAN |
|
TINYINT |
|
SMALLINT |
|
INT, INTEGER |
|
BIGINT |
|
REAL |
|
DOUBLE |
|
DECIMAL ( |
|
CHAR, CHAR (Länge ) |
|
VARCHAR, VARCHAR (Länge) |
|
VARBINARY |
|
ZEIT, ZEIT (Genauigkeit) |
|
TIME WITH TIME ZONE |
|
DATUM |
|
TIMESTAMP, TIMESTAMP OHNE ZEITZONE, TIMESTAMP ( |
|
ZEITSTEMPEL MIT ZEITZONE, ZEITSTEMPEL (PRÄZISION) MIT ZEITZONE |
|
INTERVAL YEAR TO MONTH |
|
INTERVAL DAY TO SECOND |
|
ARRAY [Elementtyp] |
|
MAP ( |
Beachten Sie, dass Maps aus einem Array von Schlüsseln und einem Array von Werten erstellt werden. |
|
Beachten Sie, dass auf diese Weise erstellte Zeilen keine Spaltennamen haben. Um Spaltennamen hinzuzufügen, können Sie wie im folgenden Beispiel Folgendes verwenden
|
JSON |
|
UUID |
|
IP-ADRESSE |
|
Überlegungen zu Datentypen
Größenbeschränkungen
Beachten Sie bei Datentypen, für die keine Größenbeschränkung angegeben ist, dass es für alle Daten in einer einzelnen Zeile eine praktische Grenze von 32 MB gibt. Weitere Informationen finden Sie unter Row or column size limitation in Überlegungen und Einschränkungen für SQL-Abfragen in Amazon Athena.
CHAR und VARCHAR
Ein CHAR(
Wert hat immer eine Anzahl von Zeichen. n
)
Wenn Sie beispielsweise 'abc' in umwandelnn
CHAR(7)
, werden 4 abschließende Leerzeichen hinzugefügt.
Vergleiche von CHAR
Werten beinhalten führende und nachfolgende Leerzeichen.
Wenn für CHAR
oder eine Länge angegeben wirdVARCHAR
, werden Zeichenketten beim Lesen auf die angegebene Länge gekürzt. Wenn die zugrunde liegende Datenzeichenfolge länger ist, bleibt die zugrunde liegende Datenzeichenfolge unverändert.
Um ein einfaches Anführungszeichen in einem CHAR
Oder zu maskierenVARCHAR
, verwenden Sie ein zusätzliches einfaches Anführungszeichen.
Um einen Datentyp, der keine Zeichenfolge ist, in einer DML-Abfrage in eine Zeichenfolge umzuwandeln, müssen Sie in den VARCHAR
Datentyp umwandeln.
Um mit der substr
Funktion eine Teilzeichenfolge der angegebenen Länge aus einem CHAR
Datentyp zurückzugeben, müssen Sie den CHAR
Wert zunächst in ein umwandeln. VARCHAR
Im folgenden Beispiel wird der CHAR
Datentyp col1
verwendet.
substr(CAST(col1 AS VARCHAR), 1, 4)
DECIMAL
Um Dezimalwerte in SELECT
Abfragen als Literale anzugeben, z. B. bei der Auswahl von Zeilen mit einem bestimmten Dezimalwert, können Sie den DECIMAL
Typ angeben und den Dezimalwert in Ihrer Abfrage als Literal in einfachen Anführungszeichen auflisten, wie in den folgenden Beispielen.
SELECT * FROM my_table WHERE decimal_value = DECIMAL '0.12'
SELECT DECIMAL '44.6' + DECIMAL '77.2'
Mit Zeitstempeldaten arbeiten
In diesem Abschnitt werden einige Überlegungen zur Arbeit mit Zeitstempeldaten in Athena beschrieben.
Anmerkung
Die Behandlung von Zeitstempeln hat sich zwischen der Athena-Engine-Version 2 und der Athena-Engine-Version 3 etwas geändert. Informationen zu Fehlern im Zusammenhang mit Zeitstempeln, die in Athena-Engine-Version 3 auftreten können, sowie Lösungsvorschläge finden Sie unter Änderungen des Zeitstempels in der Athena-Engine-Version 3-Referenz.
Format für das Schreiben von Zeitstempeldaten in Amazon-S3-Objekte
Das Format, in dem Zeitstempeldaten in Amazon S3 S3-Objekte geschrieben werden sollen, hängt sowohl vom Spaltendatentyp als auch von der verwendeten SerDeBibliothek ab.
-
Wenn Sie eine Tabellenspalte vom Typ
DATE
haben, erwartet Athena, dass es sich bei der entsprechenden Spalte oder Eigenschaft der Daten um eine Zeichenfolge im ISO-FormatYYYY-MM-DD
oder um einen integrierten Datumstyp wie bei Parquet oder ORC handelt. -
Wenn Sie eine Tabellenspalte vom Typ
TIME
haben, erwartet Athena, dass es sich bei der entsprechenden Spalte oder Eigenschaft der Daten um eine Zeichenfolge im ISO-FormatHH:MM:SS
oder um einen integrierten Zeittyp wie bei Parquet oder ORC handelt. -
Wenn Sie eine Tabellenspalte des Typs
TIMESTAMP
haben, erwartet Athena, dass die entsprechende Spalte oder Eigenschaft der Daten eine Zeichenkette im FormatYYYY-MM-DD HH:MM:SS.SSS
ist (beachten Sie das Leerzeichen zwischen Datum und Uhrzeit), oder ein eingebauter Zeittyp wie die für Parquet, ORC oder Ion.Anmerkung
SerDe OpenCSV-Zeitstempel sind eine Ausnahme und müssen als UNIX-Epochen mit Millisekundenauflösung codiert werden.
Sicherstellen, dass zeitlich aufgeteilte Daten mit dem Zeitstempelfeld in einem Datensatz übereinstimmen
Der Hersteller der Daten muss sicherstellen, dass die Partitionswerte mit den Daten innerhalb der Partition übereinstimmen. Wenn Ihre Daten beispielsweise eine timestamp
Eigenschaft haben und Sie Firehose verwenden, um die Daten in Amazon S3 zu laden, müssen Sie dynamische Partitionierung verwenden, da die Standardpartitionierung von Firehose wall-clock-based
String als Datentyp für Partitionsschlüssel verwenden
Aus Leistungsgründen ist es vorzuziehen, STRING
als Datentyp für Partitionsschlüssel zu verwenden. Obwohl Athena Partitionswerte im Format YYYY-MM-DD
als Datum erkennt, wenn Sie den DATE
-Typ verwenden, kann dies zu einer schlechten Leistung führen. Aus diesem Grund empfehlen wir, stattdessen den STRING
-Datentyp für Partitionsschlüssel zu verwenden.
Wie Sie Abfragen für Zeitstempelfelder schreiben, die ebenfalls zeitpartitioniert sind
Wie Sie Abfragen für Zeitstempelfelder schreiben, die zeitpartitioniert sind, hängt vom Tabellentyp ab, den Sie abfragen möchten.
Hive-Tabellen
Bei den Hive-Tabellen, die in Athena am häufigsten verwendet werden, hat die Abfrage-Engine keine Kenntnis von den Beziehungen zwischen Spalten und Partitionsschlüsseln. Aus diesem Grund müssen Sie Ihren Abfragen immer Prädikate sowohl für die Spalte als auch für den Partitionsschlüssel hinzufügen.
Nehmen wir beispielsweise an, Sie haben eine event_time
-Spalte und einen event_date
-Partitionsschlüssel und möchten Ereignisse zwischen 23:00 und 03:00 Uhr abfragen. In diesem Fall müssen Sie Prädikate in Ihre Abfrage sowohl für die Spalte als auch für den Partitionsschlüssel aufnehmen, wie im folgenden Beispiel.
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Iceberg-Tabellen
Bei Iceberg-Tabellen können Sie berechnete Partitionswerte verwenden, was Ihre Abfragen vereinfacht. Nehmen wir beispielsweise an, Ihre Iceberg-Tabelle wurde mit einer PARTITIONED BY
-Klausel wie der folgenden erstellt:
PARTITIONED BY (event_date month(event_time))
In diesem Fall löscht die Abfrage-Engine automatisch Partitionen auf der Grundlage der Werte der event_time
-Prädikate. Aus diesem Grund muss Ihre Abfrage nur ein Prädikat für event_time
angeben, wie im folgenden Beispiel.
WHERE event_time BETWEEN
start_time
ANDend_time
Weitere Informationen finden Sie unter Erstellen von Iceberg-Tabellen.