Arbeiten Sie mit Zeitstempeldaten - Amazon Athena

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 habenDATE, erwartet Athena, dass es sich bei der entsprechenden Spalte oder Eigenschaft der Daten um eine Zeichenfolge im ISO Format YYYY-MM-DD oder um einen integrierten Datumstyp wie bei Parquet oder ORC handelt.

  • Wenn Sie eine Tabellenspalte vom Typ habenTIME, erwartet Athena, dass es sich bei der entsprechenden Spalte oder Eigenschaft der Daten um eine Zeichenfolge im ISO Format HH:MM:SS oder um einen integrierten Zeittyp wie die für Parquet oder ORC handelt.

  • Wenn Sie eine Tabellenspalte vom Typ habenTIMESTAMP, erwartet Athena, dass es sich bei der entsprechenden Spalte oder Eigenschaft der Daten um eine Zeichenfolge im Format YYYY-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 AND end_time AND event_date BETWEEN start_time_date AND end_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 AND end_time

Weitere Informationen finden Sie unter Iceberg-Tabellen erstellen.