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.
Arbeiten Sie mit Zeitstempeldaten
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 haben
DATE
, 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 haben
TIME
, 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 die für Parquet oder ORC handelt. -
Wenn Sie eine Tabellenspalte vom Typ haben
TIMESTAMP
, erwartet Athena, dass es sich bei der entsprechenden Spalte oder Eigenschaft der Daten um eine Zeichenfolge im FormatYYYY-MM-DD HH:MM:SS.SSS
(beachten Sie den Abstand zwischen Datum und Uhrzeit) oder um einen integrierten Uhrzeittyp wie den für Parquet oder Ion handelt. ORC Beachten Sie, dass Athena das Verhalten für ungültige Zeitstempel (z. B.) nicht garantiert.0000-00-00 08:00:00.000
Anmerkung
O penCSVSer De Zeitstempel sind eine Ausnahme und müssen als Epochen mit einer Auflösung von Millisekunden codiert werden. UNIX
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 Iceberg-Tabellen erstellen.