Amazon-Athena-DocumentDB-Konnektor - Amazon Athena

Amazon-Athena-DocumentDB-Konnektor

Der DocumentDB-Konnektor von Amazon Athena ermöglicht Amazon Athena die Kommunikation mit Ihren DocumentDB-Instances, sodass Sie Ihre DocumentDB-Daten mit SQL abfragen können. Der Konnektor funktioniert auch mit jedem Endpunkt, der mit MongoDB kompatibel ist.

Im Gegensatz zu herkömmlichen relationalen Datenspeichern haben Amazon-DocumentDB-Sammlungen kein festgelegtes Schema. DocumentDB besitzt keinen Metadatenspeicher. Jeder Eintrag in einer DocumentDB-Sammlung kann unterschiedliche Felder und Datentypen haben.

Der DocumentDB-Konnektor unterstützt zwei Mechanismen zum Generieren von Tabellenschemainformationen: grundlegende Schemainferenz und AWS Glue Data Catalog-Metadaten.

Die Schemainferenz ist die Standardeinstellung. Mit dieser Option werden eine kleine Anzahl von Dokumenten in Ihrer Sammlung gescannt, eine Vereinigung aller Felder gebildet und Felder mit nicht überlappenden Datentypen erzwungen. Diese Option eignet sich gut für Sammlungen, die größtenteils einheitliche Einträge haben.

Für Sammlungen mit einer größeren Vielfalt an Datentypen unterstützt der Konnektor das Abrufen von Metadaten aus dem AWS Glue Data Catalog. Wenn der Konnektor eine AWS Glue-Datenbank und -Tabelle findet, die Ihren DocumentDB-Datenbank- und -Sammlungsnamen entsprechen, erhält er ihre Schemainformationen von den entsprechenden AWS Glue-Tabelle. Wenn Sie Ihre AWS Glue-Tabelle erstellen, wird empfohlen, dass Sie sie zu einer Übergruppe aller Felder machen, auf die Sie möglicherweise von Ihrer DocumentDB-Sammlung aus zugreifen möchten.

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.

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.

Voraussetzungen

Parameter

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

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-Datenquellen-Connectors, die vor dem 3. Dezember 2024 erstellt wurden. Diese können von ihren entsprechenden AWS Glue-Verbindungseigenschaften abweichen. Verwenden Sie ab dem 3. Dezember 2024 die folgenden Parameter nur, wenn Sie eine frühere Version eines Athena-Datenquellen-Connectors manuell bereitstellen.

Wir empfehlen, dass Sie einen DocumentDB-Connector mithilfe eines Glue-Connections-Objekts konfigurieren. Setzen Sie dazu die glue_connection Umgebungsvariable des DocumentDB-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 DOCUMENTDB

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 DocumentDB-Connector unterstützt die Verwendung eines Multiplexing-Handlers nicht.

  • Der mit Glue-Connection erstellte DocumentDB-Connector unterstützt nur ConnectionSchemaVersion 2.

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

  • default_docdb – Gibt, falls vorhanden, eine DocumentDB-Verbindungszeichenfolge an, die verwendet wird, wenn keine katalogspezifische Umgebungsvariable vorhanden ist.

  • disable_projection_and_casing – (Optional) Deaktiviert Projektion und Groß-/Kleinschreibung. Verwenden Sie diese Option, wenn Sie Amazon-DocumentDB-Tabellen abfragen möchten, die die Groß- und Kleinschreibung von Spaltennamen verwenden. Der disable_projection_and_casing-Parameter verwendt die folgenden Werte, um das Verhalten der Groß-/Kleinschreibung und Spaltenzuordnung festzulegen:

    • falsch – Dies ist die Standardeinstellung. Die Projektion ist aktiviert, und der Konnektor erwartet, dass alle Spaltennamen in Kleinbuchstaben geschrieben sind.

    • wahr – Deaktiviert Projektion und Groß- und Kleinschreibung. 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.

  • enable_case_insensitive_match – (Optional) Wenn true, führt Suchen ohne Berücksichtigung der Groß- und Kleinschreibung in Schema- und Tabellennamen in Amazon DocumentDB durch. Der Standardwert ist false. Verwenden Sie dies, wenn Ihre Abfrage Schema- oder Tabellennamen in Großbuchstaben enthält.

Angeben von Verbindungszeichenfolgen

Sie können eine oder mehrere Eigenschaften angeben, die die DocumentDB-Verbindungsdetails für die DocumentDB-Instances definieren, die Sie mit dem Konnektor verwenden. Legen Sie dazu eine Lambda-Umgebungsvariable fest, die dem Katalognamen entspricht, den Sie in Athena verwenden möchten. Angenommen, Sie möchten die folgenden Abfragen verwenden, um zwei verschiedene DocumentDB-Instances von Athena abzufragen:

SELECT * FROM "docdb_instance_1".database.table
SELECT * FROM "docdb_instance_2".database.table

Bevor Sie diese beiden SQL-Anweisungen verwenden können, müssen Sie Ihrer Lambda-Funktion zwei Umgebungsvariablen hinzufügen: docdb_instance_1 und docdb_instance_2. Der Wert für jede sollte eine Document-D-Verbindungszeichenfolge mit folgendem Format sein:

mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0
Verwendung von Secrets

Sie können optional AWS Secrets Manager für einen Teil oder den gesamten Wert für die Details Ihrer Verbindungszeichenfolge verwenden. Um das Athena-Federated-Query-Feature mit Secrets Manager zu verwenden, sollte die mit Ihrer Lamba-Funktion verbundene VPC über einen Internetzugang oder einen VPC-Endpunkt verfügen, um eine Verbindung zu Secrets Manager herzustellen.

Wenn Sie die Syntax ${my_secret} verwenden, um den Namen eines Secrets aus dem Secrets Manager in Ihre Verbindungszeichenfolge einzufügen, ersetzt der Konnektor ${my_secret} genau durch den Klartextwert aus Secrets Manager. Secrets sollten als Klartext-Secrets mit dem Wert <username>:<password> gespeichert werden. Secrets, die als {username:<username>,password:<password>} gespeichert wurden, werden nicht ordnungsgemäß an die Verbindungszeichenfolge übergeben.

Secrets können auch vollständig für die gesamte Verbindungszeichenfolge verwendet werden, und der Benutzername und das Passwort können innerhalb des Secrets definiert werden.

Angenommen, Sie setzen die Lambda-Umgebungsvariable für docdb_instance_1 auf den folgenden Wert:

mongodb://${docdb_instance_1_creds}@myhostname.com:123/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0

Das Athena Query Federation SDK versucht automatisch, ein Secret mit dem Namen docdb_instance_1_creds vom Secrets Manager abzurufen und setzt diesen Wert anstelle von ${docdb_instance_1_creds}. Ein beliebiger Teil der Verbindungszeichenfolge, der in der ${ }-Zeichenkombination enthalten ist, wird als Secret aus Secrets Manager interpretiert. Wenn Sie einen geheimen Namen angeben, den der Konnektor in Secrets Manager nicht finden kann, ersetzt der Konnektor den Text nicht.

Abrufen zusätzlicher Metadaten

Um zusätzliche Metadaten abzurufen, gehen Sie wie folgt vor, um Ihre Glue-Datenbank und -Tabelle zu konfigurieren.

Die Glue-Datenbank einrichten

  1. Erstellen Sie eine Glue-Datenbank mit dem gleichen Namen wie Ihre DocumentDB-Sammlung.

  2. Geben Sie docdb-metadata-flag im Feld Standort-URI ein.

Konfigurieren Sie die Glue-Tabelle

Fügen Sie Ihrer Glue-Tabelle die folgenden Parameter hinzu:

  • docdb-metadata-flag = true

  • columnMapping = apple=APPLE

    In diesem Beispiel steht apple für den kleingeschriebenen Spaltennamen in Glue und APPLE für den tatsächlichen Spaltennamen, bei dem Groß- und Kleinschreibung beachtet wird, in Ihrer DocumentDB-Sammlung.

Abrufen von Metadaten überprüfen

  1. Führen Sie Ihre Abfrage aus.

  2. Überprüfen Sie die CloudWatch-Protokolle der Lambda-Funktion auf erfolgreiche Metadatenabfrage. Bei einem erfolgreichen Abruf wird der folgende Protokolleintrag angezeigt:

    doGetTable: Retrieved schema for table[TableName{schemaName=test, tableName=profiles}] from AWS Glue.
Anmerkung

Wenn in Ihrer Tabelle bereits ein columnMapping-Feld konfiguriert ist, müssen Sie lediglich den docdb-metadata-flag = true-Parameter zu den Tabelleneigenschaften hinzufügen.

Einrichten von Datenbanken und Tabellen in AWS Glue

Da die integrierte Schemainferenzfunktion des Konnektors eine begrenzte Anzahl von Dokumenten scannt und nur eine Teilmenge von Datentypen unterstützt, sollten Sie stattdessen AWS Glue für Metadaten verwenden.

Um eine AWS Glue-Tabelle für die Verwendung mit Amazon DocumentDB zu aktivieren, müssen Sie über eine AWS Glue-Datenbank und -Tabelle für die DocumentDB-Datenbank und -Sammlung verfügen, für die Sie zusätzliche Metadaten bereitstellen möchten.

Verwenden Sie eine AWS Glue-Tabelle für ergänzende Metadaten wie folgt
  1. Verwenden Sie die AWS Glue-Konsole, um eine AWS Glue-Datenbank zu erstellen, die denselben Namen wie Ihr Amazon DocumentDB-Datenbankname hat.

  2. Stellen Sie die URI-Eigenschaft der Datenbank so ein, dass sie docdb-metadata-flag enthält.

  3. (Optional) Fügen Sie die Tabelleneigenschaft sourceTable hinzu. Diese Eigenschaft definiert den Namen der Quelltabelle in Amazon DocumentDB. Verwenden Sie diese Eigenschaft, wenn Ihre AWS Glue-Tabelle einen anderen Namen als der Tabellenname in Amazon DocumentDB hat. Unterschiede in den Benennungsregeln zwischen AWS Glue und Amazon DocumentDB können dies erforderlich machen. Beispielsweise sind Großbuchstaben in AWS Glue-Tabellennamen nicht zulässig, aber sie sind in Amazon-DocumentDB-Tabellennamen zulässig.

  4. (Optional) Fügen Sie die Tabelleneigenschaft columnMapping hinzu. Diese Eigenschaft definiert die Zuordnungen von Spaltennamen. Verwenden Sie diese Eigenschaft, wenn Benennungsregeln für AWS Glue-Tabellen Sie daran hindern, eine AWS Glue-Tabelle mit demselben Namen wie die in Ihrer Amazon-DocumentDB-Tabelle zu erstellen. Dies kann nützlich sein, da Großbuchstaben in Amazon-DocumentDB-Spaltennamen zulässig sind, aber nicht in AWS Glue-Spaltennamen.

    Es wird erwartet, dass es sich bei dem columnMapping-Eigenschaftswert um eine Reihe von Zuordnungen im Format col1=Col1,col2=Col2 handelt.

    Anmerkung

    Die gilt Spaltenzuordnung nur für Spaltennamen der obersten Ebene und nicht für verschachtelte Felder.

    Nachdem Sie die AWS Glue-columnMapping-Tabelleneigenschaft hinzugefügt haben, können Sie die disable_projection_and_casing-Lambda-Umgebungsvariable entfernen.

  5. Achten Sie darauf, Datentypen zu verwenden, die für AWS Glue geeignet sind, wie in diesem Dokument aufgeführt.

Datentypunterstützung

In diesem Abschnitt werden die Datentypen aufgeführt, die der DocumentDB-Konnektor für die Schemainferenz verwendet, und die Datentypen, wenn AWS Glue-Metadaten werden verwendet.

Datentypen für Schemainferenz

Das Schemainferenzfeature des DocumentDB-Konnektors versucht, Werte als zu einem der folgenden Datentypen gehörend abzuleiten. Die Tabelle zeigt die entsprechenden Datentypen für Amazon DocumentDB, Java und Apache Arrow.

Apache Arrow Java oder DocDB
VARCHAR String
INT Ganzzahl
BIGINT Long
BIT Boolesch
FLOAT4 Gleitkommazahl
FLOAT8 Double
ZEITSTEMPEL/SEK Datum
VARCHAR ObjectId
LIST Auflisten
STRUCT Dokument

AWS Glue-Datentypen

Wenn Sie AWS Glue für ergänzende Metadaten verwenden, können Sie die folgenden Datentypen konfigurieren. Die Tabelle zeigt die entsprechenden Datentypen für AWS Glue und Apache Arrow.

AWS Glue Apache Arrow
int INT
bigint BIGINT
double FLOAT8
float FLOAT4
boolesch BIT
Binary VARBINARY
Zeichenfolge VARCHAR
Liste LIST
Struct STRUCT

Erforderliche Berechtigungen

Ausführliche Informationen zu den für diesen Konnektor erforderlichen IAM-Richtlinien finden Sie im Policies-Abschnitt der athena-docdb.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 DocumentDB-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.

  • AWS Secrets Manager Lesezugriff – Wenn Sie DocumentDB-Endpunktdetails in Secrets Manager speichern möchten, müssen Sie dem Konnektor Zugriff auf diese Secrets gewähren.

  • Zugriff auf die VPC – Der Konnektor erfordert die Fähigkeit, Schnittstellen an Ihre VPC anzuhängen und zu trennen, damit diese eine Verbindung zu dieser herstellen und mit Ihren DocumentDB-Instances kommunizieren kann.

Leistung

Der Amazon-DocumentDB-Konnektor von Athena unterstützt derzeit keine parallelen Scans, sondern versucht, Prädikate als Teil seiner DocumentDB-Abfragen nach unten zu verschieben. Prädikate für Indizes in Ihrer DocumentDB-Sammlung führen zu deutlich weniger gescannten Daten.

Die Lambda-Funktion führt Projektions-Pushdown durch, um die von der Abfrage gescannten Daten zu reduzieren. Die Auswahl einer Teilmenge von Spalten führt jedoch manchmal zu einer längeren Laufzeit der Abfrageausführung. LIMIT-Klauseln reduzieren die Menge der gescannten Daten, aber wenn Sie kein Prädikat angeben, sollten Sie davon ausgehen, dass SELECT-Abfragen mit einer LIMIT-Klausel mindestens 16 MB an Daten scannen.

Pass-Through-Abfragen

Der Athena Amazon DocumentDB-Connector unterstützt Pass-Through-Abfragen und basiert auf NoSQL. Weitere Informationen über Abfragen in Amazon-DocumentDB finden Sie unter Abfragen im Amazon-DocumentDB-Entwicklerhandbuch.

Verwenden Sie die folgende Syntax, um Pass-Through-Abfragen mit Amazon DocumentDB zu verwenden:

SELECT * FROM TABLE( system.query( database => 'database_name', collection => 'collection_name', filter => '{query_syntax}' ))

Im folgenden Beispiel wird die example-Datenbank innerhalb der TPCDS-Sammlung abgefragt und dabei nach allen Büchern mit dem Titel Grundrechte gefiltert.

SELECT * FROM TABLE( system.query( database => 'example', collection => 'tpcds', filter => '{title: "Bill of Rights"}' ))

Weitere Ressourcen