Amazon Athena DynamoDB Konnektor - Amazon Athena

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.

Dieser Connector kann bei Glue-Datenkatalog als Verbundkatalog registriert werden. Er unterstützt in Lake Formation definierte Datenzugriffskontrollen auf Katalog-, Datenbank-, Tabellen-, Spalten-, Zeilen- und Tagebene. Dieser Konnektor verwendet Glue Connections, um die Konfigurationseigenschaften in Glue zu zentralisieren.

Wenn Sie Lake Formation in Ihrem Konto aktiviert haben, muss die IAM-Rolle für Ihren Athena-Verbund-Lambda-Konnektor, den Sie im AWS Serverless Application Repository bereitstellen, in Lake Formation über Lesezugriff auf das AWS Glue Data Catalog verfügen.

Voraussetzungen

Einschränkungen

Wenn Sie Ihre DynamoDB-Verbindungen zu Glue Catalog und Lake Formation migrieren, werden nur die in Kleinbuchstaben geschriebenen Tabellen- und Spaltennamen erkannt.

Parameter

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

Wir empfehlen, dass Sie einen DynamoDB-Connector mithilfe eines Glue-Connections-Objekts konfigurieren. Setzen Sie dazu die glue_connection-Umgebungsvariable des DynamoDB-Konnektors Lambda auf den Namen der zu verwendenden Glue-Connection.

Eigenschaften von Glue Connections

Verwenden Sie den folgenden Befehl, um das Schema für ein Glue-Connection-Objekt zu erhalten. Dieses Schema enthält alle Parameter, mit denen Sie Ihre Verbindung steuern können.

aws glue describe-connection-type --connection-type DYNAMODB

Lambda-Umgebungseigenschaften

glue_connection – Gibt den Namen der Glue-Connection an, die dem Verbund-Connector zugeordnet ist.

Anmerkung
  • Alle Konnektoren, die Glue Connections verwenden, müssen AWS Secrets Manager zum Speichern von Anmeldeinformationen verwenden.

  • Der mit Glue-Connection erstellte DynamoDB-Connector unterstützt die Verwendung eines Multiplexing-Handlers nicht.

  • Der mit Glue-Verbindungen erstellte DynamoDB-Konnektor unterstützt nur ConnectionSchemaVersion 2.

Anmerkung

Athena-Datenquellenkonnektoren, die am 3. Dezember 2024 und später erstellt wurden, verwenden AWS Glue-Verbindungen.

Die unten aufgeführten Parameternamen und Definitionen beziehen sich auf Athena-Datenquellenkonnektoren, die ohne eine zugehörige Glue-Connection erstellt wurden. Verwenden Sie die folgenden Parameter nur, wenn Sie eine frühere Version eines Athena-Datenquellenkonnektors manuell bereitstellen oder wenn die glue_connection-Umgebungseigenschaft nicht angegeben ist.

Lambda-Umgebungseigenschaften

  • 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"}). Andere mögliche Header finden Sie unter PutObject in der API-Referenz zu Amazon Simple Storage Service.

  • 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“ (wahr) gesetzt, versucht der Konnektor nicht, zusätzliche Metadaten aus AWS Glue abzurufen.

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

  • 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 für Ihre AWS Glue-Tabelle festlegen wollen.

    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 regionsübergreifenden Übertragungskosten finden Sie unter AWS-Datenübertragungsgebühren für Server- und Serverless Architekturen im AWS-Partner-Network-Blog.

    • 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 integrierten Schemainferenzfunktionen des Konnektors begrenzt sind, sollten Sie AWS Glue für Metadaten verwenden. Dazu müssen Sie über eine Datenbank und eine Tabelle in AWS Glue verfügen. Um sie für die Verwendung mit DynamoDB zu aktivieren, müssen Sie ihre Eigenschaften bearbeiten.

So bearbeiten Sie Datenbankeigenschaften in der AWS Glue-Konsole
  1. Melden Sie sich bei der AWS-Managementkonsole an 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. Auf der Seite Eine Datenbank aktualisieren, unter Datenbankeinstellungen, fügen Sie für Speicherort die Zeichenfolge dynamo-db-flag hinzu. Dieses Schlüsselwort gibt an, dass die Datenbank Tabellen enthält, die der Athena-DynamoDB-Konnektor für ergänzende Metadaten verwendet und ist für andere AWS Glue-Datenbanken als default erforderlich. 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.

Tabelleneigenschaften in der AWS Glue-Konsole bearbeiten
  1. Melden Sie sich bei der AWS-Managementkonsole an 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 Seite Tabellen in der Liste der Tabellen den verknüpften Namen der Tabelle, 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 der Tabellenerstellung in der AWS Glue-Konsole ist, enthält einen Abschnitt Datenformat mit einem Feld Klassifizierung. 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 dies, wenn AWS Glue-Regeln für die Tabellenbenennung das Erstellen einer AWS Glue-Tabelle mit demselben Namen wie Ihre DynamoDB-Tabelle verhindern. Zum Beispiel sind Großbuchstaben in AWS Glue-Tabellennamen nicht erlaubt, aber sie sind in DynamoDB-Tabellennamen zulässig.

    • columnMapping – Optionale Tabelleneigenschaft, die Spaltennamenzuordnungen definiert. Verwenden Sie dies, wenn AWS Glue-Regeln für die Spaltenbenennung das Erstellen einer AWS Glue-Tabelle mit denselben Spaltennamen wie Ihre DynamoDB-Tabelle verhindern. Zum Beispiel sind Großbuchstaben in AWS Glue-Spaltennamen nicht erlaubt, sind aber in DynamoDB-Spaltennamen 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 date- oder datetime-Werte angewendet wird, 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 date- oder datetime-Format festlegt, das beim Analysieren von Daten aus einer Spalte des AWS Glue-, date- oder timestamp-Datentyps zu verwenden ist. 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 ein Fast-Fail durchzuführen, wenn die vorgeschaltete Athena-Abfrage beendet wurde.

  • AWS Glue Data Catalog – Der DynamoDB-Konnektor benötigt schreibgeschützten Zugriff auf AWS Glue Data Catalog, um Schemainformationen zu erhalten.

  • CloudWatch Logs – Der Konnektor benötigt Zugriff auf CloudWatch Logs zum Speichern von Protokollen.

  • 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.

Pass-Through-Abfragen

Der DynamoDB-Connector unterstützt Pass-Through-Abfragen und verwendet PartiQL-Syntax. Die DynamoDB GetItem API-Operation wird nicht unterstützt. Informationen zum Abfragen von DynamoDB mit PartiQL finden Sie unter PartiQL Anweisungen für DynamoDB auswählen im Amazon DynamoDB Entwicklerhandbuch.

Verwenden Sie die folgende Syntax, um Pass-Through-Abfragen mit DocumentDB 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.2022 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: KeyConditionExpressions darf 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 Datenquellen-Konnektor aktualisieren.

Kosten

Die Kosten für die Nutzung des Steckverbinders hängen von den zugrundeliegenden 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