Amazon Athena DynamoDB Konnektor - 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.

Amazon Athena DynamoDB Konnektor

Der Amazon-Athena-DynamoDB-Konnektor ermöglicht Amazon Athena die Kommunikation mit DynamoDB, sodass Sie Ihre Tabellen mit SQL abfragen können. Schreiboperationen wie INSERT INTO werden nicht unterstützt.

Wenn Sie Lake Formation in Ihrem Konto aktiviert haben, AWS Serverless Application Repository muss die IAM-Rolle für Ihren Athena Federated Lambda Connector, den Sie in der bereitgestellt haben, Lesezugriff in Lake Formation auf den haben. AWS Glue Data Catalog

Voraussetzungen

Parameter

Verwenden Sie die Lambda-Umgebungsvariablen in diesem Abschnitt, um den DynamoDB-Konnektor zu konfigurieren.

  • spill_bucket – Gibt den Amazon S3-Bucket für Daten an, die die Lambda-Funktionsgrenzen überschreiten.

  • spill_prefix – (Optional) Ist standardmäßig ein Unterordner im angegebenen spill_bucket genannt athena-federation-spill. Wir empfehlen Ihnen, einen Amazon-S3-Speicher-Lebenszyklus an dieser Stelle zu konfigurieren, um die Überlaufe zu löschen, die älter als eine festgelegte Anzahl von Tagen oder Stunden sind.

  • spill_put_request_headers – (Optional) Eine JSON-codierte Zuordnung von Anforderungsheadern und Werten für die Amazon-S3-putObject-Anforderung, die für den Überlauf verwendet wird (z. B. {"x-amz-server-side-encryption" : "AES256"}). Weitere mögliche Header finden Sie PutObjectin der Amazon Simple Storage Service API-Referenz.

  • kms_key_id – (Optional) Standardmäßig werden alle Daten, die an Amazon S3 gesendet werden, mit dem AES-GCM-authentifizierten Verschlüsselungsmodus und einem zufällig generierten Schlüssel verschlüsselt. Damit Ihre Lambda-Funktion stärkere Verschlüsselungsschlüssel verwendet, die von KMS generiert werden, wiea7e63k4b-8loc-40db-a2a1-4d0en2cd8331, können Sie eine ID einer Verschlüsselung angeben.

  • disable_spill_encryption – (Optional) Bei Einstellung auf True, wird die Spill-Verschlüsselung deaktiviert. Die Standardeinstellung ist False, sodass Daten, die an S3 übertrragen werden, mit AES-GCM verschlüsselt werden - entweder mit einem zufällig generierten Schlüssel oder mit KMS zum Generieren von Schlüsseln. Das Deaktivieren der Überlauf-Verschlüsselung kann die Leistung verbessern, insbesondere wenn Ihr Überlauf-Standort eine serverseitige Verschlüsselung verwendet.

  • disable_glue — (Optional) Falls vorhanden und auf true gesetzt, versucht der Connector nicht, zusätzliche Metadaten von abzurufen. AWS Glue

  • glue_catalog – (Optional) Verwenden Sie diese Option, um einen kontoübergreifenden AWS Glue -Katalog anzugeben. Standardmäßig versucht der Connector, Metadaten von seinem eigenen Konto abzurufen. AWS Glue

  • disable_projection_and_casing – (Optional) Deaktiviert Projektion und Groß-/Kleinschreibung. Verwenden Sie diese Option, wenn Sie DynamoDB-Tabellen abfragen möchten, deren Spaltennamen Groß- und Kleinschreibung enthalten, und Sie keine columnMapping Eigenschaft in Ihrer AWS Glue Tabelle angeben möchten.

    Der disable_projection_and_casing-Parameter verwendt die folgenden Werte, um das Verhalten der Groß-/Kleinschreibung und Spaltenzuordnung festzulegen:

    • auto – Deaktiviert Projektion und Groß-/Kleinschreibung, wenn ein zuvor nicht unterstützter Typ erkannt wird und die Spaltennamenzuordnung für die Tabelle nicht festgelegt ist. Dies ist die Standardeinstellung.

    • always – Deaktiviert Projektion und Groß-/Kleinschreibung bedingungslos. Dies ist nützlich, wenn Ihre DynamoDB-Spaltennamen Groß- und Kleinschreibung enthalten, aber keine Spaltennamenzuordnung angeben möchten.

    Beachten Sie bei der Verwendung des disable_projection_and_casing Parameters die folgenden Punkte:

    • Die Verwendung des Parameters kann zu höherer Bandbreitennutzung führen. Wenn sich Ihre Lambda-Funktion nicht in derselben AWS-Region wie Ihre Datenquelle befindet, entstehen Ihnen darüber hinaus aufgrund der höheren Bandbreitennutzung höhere standardmäßige AWS -Übertragungskosten zwischen den Regionen. Weitere Informationen zu den Kosten für die Übertragung zwischen Regionen finden Sie im Partner Network-Blog unter AWS Datenübertragungsgebühren für Server- und serverlose Architekturen. AWS

    • Da eine größere Anzahl von Bytes übertragen wird und die größere Anzahl von Bytes eine höhere Deserialisierungszeit erfordert, kann sich die Gesamtlatenz erhöhen.

Einrichten von Datenbanken und Tabellen in AWS Glue

Da die integrierte Schema-Inferenzfunktion des Connectors begrenzt ist, sollten Sie ihn AWS Glue für Metadaten verwenden. Dazu müssen Sie über eine Datenbank und eine Tabelle verfügen. AWS Glue Um sie für die Verwendung mit DynamoDB zu aktivieren, müssen Sie ihre Eigenschaften bearbeiten.

Um Datenbankeigenschaften in der AWS Glue Konsole zu bearbeiten
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AWS Glue Konsole unter https://console.aws.amazon.com/glue/.

  2. Erweitern Sie im Navigationsbereich den Eintrag Datenkatalog und wählen Sie dann Datenbanken aus.

    Auf der Seite Databases (Datenbanken) können Sie eine vorhandene Datenbank bearbeiten oder Add Databases (Datenbank hinzufügen) auswählen, um eine zu erstellen.

  3. Wählen Sie in der Liste der Datenbanken den Link für die Datenbank aus, die Sie bearbeiten möchten.

  4. Wählen Sie Bearbeiten aus.

  5. Fügen Sie auf der Seite Datenbank aktualisieren unter Datenbankeinstellungen für Speicherort die Zeichenfolge hinzudynamo-db-flag. Dieses Schlüsselwort gibt an, dass die Datenbank Tabellen enthält, die der Athena DynamoDB-Connector für zusätzliche Metadaten verwendet, und ist für AWS Glue andere Datenbanken als erforderlich. default Die dynamo-db-flag-Eigenschaft ist nützlich, um Datenbanken in Konten mit vielen Datenbanken herauszufiltern.

  6. Wählen Sie Update Database (Datenbank aktualisieren) aus.

Um Tabelleneigenschaften in der Konsole zu bearbeiten AWS Glue
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AWS Glue Konsole unter https://console.aws.amazon.com/glue/.

  2. Erweitern Sie im Navigationsbereich den Eintrag Datenkatalog, und wählen Sie dann Tabellen aus.

  3. Wählen Sie auf der Tabellenseite in der Tabellenliste den verknüpften Namen der Tabelle aus, die Sie bearbeiten möchten.

  4. Wählen Sie Actions (Aktionen) und Edit table (Tabelle bearbeiten).

  5. Fügen Sie auf der Seite Edit table (Tabelle bearbeiten) im Abschnitt Table properties (Tabelleneigenschaften) nach Bedarf die folgenden Tabelleneigenschaften hinzu. Wenn Sie den AWS Glue DynamoDB-Crawler verwenden, werden diese Eigenschaften automatisch festgelegt.

    • DynamoDB – Zeichenfolge, die dem Athena-DynamoDB-Konnektor anzeigt, dass die Tabelle für ergänzende Metadaten verwendet werden kann. Geben Sie die dynamodb-Zeichenfolge in den Tabelleneigenschaften unter einem Feld mit der Bezeichnung classification (Einstufung) (exakte Übereinstimmung) ein.

      Anmerkung

      Die Seite Tabelleneigenschaften festlegen, die Teil des Tabellenerstellungsprozesses in der AWS Glue Konsole ist, enthält einen Abschnitt Datenformat mit einem Klassifizierungsfeld. Sie können hier nicht dynamodb eingeben oder wählen. Nachdem Sie Ihre Tabelle erstellt haben, folgen Sie stattdessen den Schritten zum Bearbeiten der Tabelle und zum Eingeben von classification und dynamodb als Schlüssel-Wert-Paar im Abschnitt Tabelleneigenschaften.

    • sourceTable – Optionale Tabelleneigenschaft, die den Namen der Quelltabelle in DynamoDB definiert. Verwenden Sie diese Option, wenn Regeln zur AWS Glue Tabellennennung Sie daran hindern, eine AWS Glue Tabelle mit demselben Namen wie Ihre DynamoDB-Tabelle zu erstellen. Beispielsweise sind Großbuchstaben in AWS Glue Tabellennamen nicht zulässig, in DynamoDB-Tabellennamen jedoch zulässig.

    • columnMapping – Optionale Tabelleneigenschaft, die Spaltennamenzuordnungen definiert. Verwenden Sie diese Option, wenn die Regeln zur AWS Glue Spaltenbenennung Sie daran hindern, eine AWS Glue Tabelle mit denselben Spaltennamen wie Ihre DynamoDB-Tabelle zu erstellen. Beispielsweise sind Großbuchstaben in AWS Glue Spaltennamen nicht zulässig, in DynamoDB-Spaltennamen jedoch zulässig. Es wird erwartet, dass der Eigenschaftswert im Format col1=COL1, col2=COL2 vorliegt. Beachten Sie, dass die Spaltenzuordnung nur für Spaltennamen der obersten Ebene und nicht für verschachtelte Felder gilt.

    • defaultTimeZone— Optionale Tabelleneigenschaft, die auf Werte angewendet wird, date oder auf datetime Werte, die keine explizite Zeitzone haben. Das Festlegen dieses Werts ist eine bewährte Methode, um Diskrepanzen zwischen der Standardzeitzone der Datenquelle und der Zeitzone der Athena-Sitzung zu vermeiden.

    • datetimeFormatMapping— Optionale Tabelleneigenschaft, die das datetime Format date oder angibt, das beim Parsen von Daten aus einer Spalte des timestamp Datentyps AWS Glue date oder verwendet werden soll. Wenn diese Eigenschaft nicht angegeben ist, versucht der Konnektor ein ISO-8601-Format ableiten. Wenn der Konnektor das date- oder datetime-Format nicht ermitteln oder die rohe Zeichenkette nicht analysieren kann, wird der Wert im Ergebnis ausgelassen.

      Der Wert datetimeFormatMapping muss das Format col1=someformat1,col2=someformat2 haben. Im Folgenden sind einige Beispielformate aufgeführt:

      yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss

      Wenn Ihre Kolumne date- oder datetime-Werte ohne Zeitzone hat und Sie die Spalte in der WHERE-Klausel verwenden möchten, legen Sie die datetimeFormatMapping-Eigenschaft für die Spalte fest.

  6. Wenn Sie Ihre Spalten manuell definieren, stellen Sie sicher, dass Sie die entsprechenden Datentypen verwenden. Wenn Sie einen Crawler verwendet haben, überprüfen Sie die Spalten und Typen, die der Crawler erkannt hat.

  7. Wählen Sie Speichern.

Erforderliche Berechtigungen

Ausführliche Informationen zu den für diesen Konnektor erforderlichen IAM-Richtlinien finden Sie im Policies-Abschnitt der athena-dynamodb.yaml-Datei. In der folgenden Liste sind die erforderlichen Berechtigungen zusammengefasst.

  • Amazon-S3-Schreibzugriff – Der Konnektor benötigt Schreibzugriff auf einen Speicherort in Amazon S3, um Ergebnisse aus großen Abfragen zu übertragen.

  • Athena GetQueryExecution — Der Konnektor verwendet diese Berechtigung, um einen Fast-Fail auszuführen, wenn die Upstream-Athena-Abfrage beendet wurde.

  • AWS Glue Data Catalog— Der DynamoDB-Konnektor benötigt nur Lesezugriff auf die, um AWS Glue Data Catalog Schemainformationen abzurufen.

  • CloudWatch Logs — Der Connector benötigt Zugriff auf CloudWatch Logs, um Logs zu speichern.

  • DynamoDB-Lesezugriff – Der Konnektor verwendet die DescribeTable, ListSchemas, ListTables, Query und Scan API-Operationen.

Leistung

Der Athena DynamoDB-Konnektor unterstützt parallel Scans und versucht, Prädikat-Push-Down als Teil seiner DynamoDB-Abfragen durchzuführen. Ein Hash-Schlüssel-Prädikat mit verschiedenen X-Werten führt zu X-Abfragen von DynamoDB. Alle anderen Prädikatszenarien führen zu einer Anzahl von Y Scan-Aufrufen, wobei Y heuristisch basierend auf der Größe Ihrer Tabelle und dem bereitgestellten Durchsatz bestimmt wird. Die Auswahl einer Teilmenge von Spalten führt jedoch manchmal zu einer längeren Laufzeit der Abfrageausführung.

LIMIT-Klauseln und einfache Prädikate werden nach unten verschoben, wodurch die Menge der gescannten Daten reduziert und die Laufzeit der Abfrageausführung verkürzt wird.

LIMIT-Klauseln

Eine LIMIT N-Anweisung reduziert die von der Abfrage durchsuchten Daten. Mit LIMIT N-Pushdown gibt der Konnektor nur N Zeilen an Athena zurück.

Prädikate

Ein Prädikat ist ein Ausdruck in der WHERE-Klausel einer SQL-Abfrage, der einen booleschen Wert ergibt und Zeilen auf der Grundlage mehrerer Bedingungen filtert. Um die Funktionalität zu erweitern und die Menge der gescannten Daten zu reduzieren, kann der Athena-DynamoDB-Konnektor diese Ausdrücke kombinieren und sie direkt an DynamoDB weiterleiten.

Die folgenden Athena-DynamoDB-Konnektor-Operatoren unterstützen Prädikat-Pushdown:

  • Boolean: UND

  • Gleichheit: GLEICH, NICHT GLEICH, WENIGER_ALS, WENIGER_ODER_GLEICH, GRÖSSER_ALS, GRÖSSER_ODER_GLEICH, IST_NULL

Beispiel für einen kombinierten Pushdown

Kombinieren Sie für erweiterte Abfragefunktionen die Pushdown-Typen wie im folgenden Beispiel:

SELECT * FROM my_table WHERE col_a > 10 and col_b < 10 LIMIT 10

Einen Artikel über die Verwendung von Prädikat-Pushdown zur Verbesserung der Leistung in Verbundabfragen, einschließlich DynamoDB, finden Sie unter Verbessern von Verbundabfragen mit Prädikat-Pushdown in Amazon Athena im AWS -Big-Data-Blog.

Passthrough-Abfragen

Der DynamoDB-Connector unterstützt Passthrough-Abfragen und verwendet PartiQL-Syntax. Der GetItemDynamoDB-API-Vorgang wird nicht unterstützt. Informationen zum Abfragen von DynamoDB mit PartiQL finden Sie unter PartiQL select statements for DynamoDB im Amazon DynamoDB Developer Guide.

Verwenden Sie die folgende Syntax, um Passthrough-Abfragen mit DynamoDB zu verwenden:

SELECT * FROM TABLE( system.query( query => 'query_string' ))

Das folgende Beispiel für eine DynamoDB-Passthrough-Abfrage verwendet PartiQL, um eine Liste von Fire TV Stick-Geräten zurückzugeben, deren DateWatched Eigenschaft nach dem 24.12.22 liegt.

SELECT * FROM TABLE( system.query( query => 'SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] > '12/24/22'' ))

Fehlerbehebung

Mehrere Filter in einer Sortierschlüsselspalte

Fehlermeldung: KeyConditionExpressionsdarf nur eine Bedingung pro Schlüssel enthalten

Ursache: Dieses Problem kann in Athena-Engine-Version 3 bei Abfragen auftreten, die sowohl einen unteren als auch einen oberen Grenzfilter für eine DynamoDB-Sortierschlüsselspalte haben. Da DynamoDB nicht mehr als eine Filterbedingung für einen Sortierschlüssel unterstützt, wird ein Fehler ausgelöst, wenn der Konnektor versucht, eine Abfrage herunterzufahren, auf die beide Bedingungen angewendet wurden.

Lösung: Aktualisieren Sie die Konnektor-Version auf Version 2023.11.1 oder höher. Anweisungen zum Aktualisieren eines Konnektors finden Sie unter Einen Datenquellenconnector aktualisieren.

Kosten

Die Kosten für die Nutzung des Connectors hängen von den zugrunde liegenden AWS Ressourcen ab, die verwendet werden. Weil Abfragen, die Scans verwenden, eine große Anzahl von Lesekapazitätseinheiten (RCUs) verbrauchen, beachten Sie genau die Informationen für Amazon DynamoDB-Prüfung.

Weitere Ressourcen