Wie kann ich partitionierte Tabellen in Amazon Athena erstellen und verwenden?

Lesedauer: 5 Minute
0

Ich möchte partitionierte Tabellen in Amazon Athena erstellen und sie verwenden, um meine Abfragen zu verbessern.

Kurzbeschreibung

Durch die Partitionierung Ihrer Athena-Tabellen können Sie die Menge der bei jeder Abfrage gescannten Daten einschränken, wodurch die Leistung verbessert und die Kosten gesenkt werden. Die Partitionierung unterteilt Ihre Tabelle in Teile und hält verwandte Daten auf der Grundlage von Spaltenwerten zusammen. Partitionen fungieren als virtuelle Spalten und tragen dazu bei, die Menge der pro Abfrage gescannten Daten zu reduzieren.

Beachten Sie Folgendes, wenn Sie eine Tabelle erstellen und die Daten partitionieren:

  • Sie müssen Ihre Daten in Amazon Simple Storage Service (Amazon S3) Buckets als Partition speichern.
  • Fügen Sie die Partitionierungsspalten und den Stammspeicherort der partitionierten Daten hinzu, wenn Sie die Tabelle erstellen.
  • Wählen Sie den geeigneten Ansatz, um die Partitionen in den AWS-Glue-Datenkatalog zu laden. Die Tabelle bezieht sich auf den Datenkatalog, wenn Sie Ihre Abfragen ausführen.
  • Verwenden Sie die Partitionsprojektion für stark partitionierte Daten in Amazon S3.

Behebung

Hier sind einige Dinge, die Sie beachten sollten, wenn Sie eine Tabelle mit Partitionen erstellen.

Auf Amazon S3 speichern

Die Daten müssen partitioniert und auf Amazon S3 gespeichert werden. Die partitionierten Daten können in einem der folgenden Formate vorliegen:

  • Hive-Style-Format (Beispiel: s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv)
    Hinweis: Der Pfad enthält die Namen der Partitionsschlüssel und ihre Werte (Beispiel: ** year=2021**)
  • Format im Nicht-Hive-Stil (Beispiel: s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv)

Fügen Sie beim Erstellen der Tabelle Partitionierungsinformationen hinzu

Die CREATE TABLE-Anweisung muss die Partitionierungsdetails enthalten. Verwenden Sie PARTITIONED BY, um die Partitionsspalten zu definieren, und LOCATION, um den Stammspeicherort der partitionierten Daten anzugeben. Führen Sie eine Abfrage ähnlich der folgenden aus:

CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'

Ersetzen Sie in der Abfrage Folgendes:

  • doc-example-table mit dem Namen der Tabelle, die Sie erstellen
  • doc-example-bucket mit dem Namen des S3 Buckets, in dem Sie Ihre Tabelle speichern
  • example-folder mit dem Namen Ihres S3-Ordners
  • first, last und username mit den Namen der Spalten
  • year, month und day mit den Namen der Partitionsspalten

Laden Sie Partitionen mit einem Ansatz in den Datenkatalog, der für Ihren Anwendungsfall geeignet ist

Nachdem Sie die Tabelle erstellt haben, fügen Sie die Partitionen zum Datenkatalog hinzu. Sie können dies mit einem der folgenden Ansätze tun:

  • Verwenden Sie die MSCK REPAIR TABLE-Abfrage für Daten im Hive-Format: Der Befehl MSCK REPAIR TABLE durchsucht ein Dateisystem wie Amazon S3 nach HIVE-kompatiblen Partitionen. Der Befehl vergleicht sie mit den Partitionen, die bereits in der Tabelle vorhanden sind, und fügt dann die neuen Partitionen dem Datenkatalog hinzu. Führen Sie einen Befehl ähnlich dem folgenden aus:
    Hinweis: Dieser Ansatz ist keine bewährte Methode, wenn Sie mehr als ein paar tausend Partitionen haben. Bei Ihren DDL-Abfragen kann es zu Timeout-Problemen kommen. Weitere Informationen finden Sie unter Warum fügt meine MSCK-REPAIR-TABLE-Abfrage dem AWS-Glue-Datenkatalog keine Partitionen hinzu?
MSCK REPAIR TABLE doc-example-table
  • **Verwenden Sie die ALTER TABLE ADD PARTITION-Abfrage sowohl für Daten im Hive-Format als auch für Daten im Nicht-Hive-Format:**Der Befehl ALTER TABLE ADD PARTITION fügt dem Datenkatalog eine oder mehrere Partitionen hinzu. Geben Sie im Befehl den Namen und die Wertepaare der Partition sowie den Amazon-S3-Pfad an, in dem die Datendateien für diese Partition gespeichert sind. Sie können eine Partition oder einen Stapel von Partitionen pro Abfrage hinzufügen, indem Sie Befehle ausführen, die den folgenden ähneln:
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
  • **Verwenden Sie den AWS-Glue-Crawler sowohl für Daten im Hive-Format als auch für Daten im Nicht-Hive-Format:**Sie können den Glue Crawler verwenden, um automatisch ein Tabellenschema aus Ihrem Datensatz abzuleiten, die Tabelle zu erstellen und dann die Partitionen zum Datenkatalog hinzuzufügen. Oder Sie können den Crawler verwenden, um nur Partitionen zu einer Tabelle hinzuzufügen, die manuell mit der Anweisung CREATE TABLE erstellt wurde. Um den Crawler zum Hinzufügen von Partitionen zu verwenden, geben Sie bei der Definition des Crawlers eine oder mehrere vorhandene Datenkatalogtabellen als Quelle des Crawls an, anstatt Datenspeicher anzugeben. Der Crawler crawlt die in den Datenkatalogtabellen angegebenen Datenspeicher. Es werden keine neuen Tabellen erstellt. Stattdessen werden die manuell erstellten Tabellen aktualisiert und neue Partitionen hinzugefügt. Weitere Informationen finden Sie unter Crawler-Konfigurationsoptionen einrichten.
  • Verwenden Sie die Partitionsprojektion für stark partitionierte Daten in Amazon S3: Wenn Sie in Amazon S3 stark partitionierte Daten haben, kann das Hinzufügen von Partitionen zum Datenkatalog unpraktisch und zeitaufwändig sein. Abfragen für eine stark partitionierte Tabelle werden nicht schnell abgeschlossen. In solchen Fällen können Sie die Funktion zur Partitionsprojektion verwenden, um die Abfrageverarbeitung hochgradig partitionierter Tabellen zu beschleunigen und die Partitionsverwaltung zu automatisieren. Bei der Partitionsprojektion werden Partitionswerte und Speicherorte anhand der Konfiguration berechnet, anstatt sie aus einem Repository wie dem Datenkatalog zu lesen. Das bedeutet, dass es nicht notwendig ist, dem Datenkatalog mit Partitionsprojektion Partitionen hinzuzufügen. Da In-Memory-Operationen in der Regel schneller sind als Remote-Operationen, kann die Partitionsprojektion die Laufzeit von Abfragen für stark partitionierte Tabellen reduzieren. Die Funktion zur Partitionsprojektion funktioniert derzeit mit aufgezählten Werten, Ganzzahlen, Datumsangaben oder Spaltentypen für injizierte Partitionen. Weitere Informationen finden Sie unter Partitionsprojektion mit Amazon Athena.

Weitere Informationen

Warum erhalte ich keine Datensätze, wenn ich meine Amazon-Athena-Tabelle abfrage?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren