Amazon-Athena-DocumentDB-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-DocumentDB-Konnektor

Der Amazon Athena DocumentDB-Connector ermöglicht es Athena, mit Ihren DocumentDB-Instances zu kommunizieren, sodass Sie Ihre DocumentDB-Daten mit abfragen können. SQL 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 AWS Glue Data Catalog. Wenn der Konnektor eine sieht AWS Glue Datenbank und Tabelle, die Ihren DocumentDB-Datenbank- und Sammlungsnamen entsprechen, ihre Schemainformationen bezieht sie aus den entsprechenden AWS Glue Tabelle. Wenn du deine erstellst AWS Glue Tabelle, wir empfehlen, dass Sie sie zu einer Obermenge 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, ist die IAM Rolle für Ihren Athena Federated Lambda Connector, den Sie bereitgestellt haben, in AWS Serverless Application Repository muss in Lake Formation Lesezugriff auf das haben AWS Glue Data Catalog.

Voraussetzungen

Parameter

Verwenden Sie die Lambda-Umgebungsvariablen in diesem Abschnitt, um den DocumentDB-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 kodierte Zuordnung von Anforderungsheadern und Werten für die Amazon S3 putObject S3-Anfrage, die zum Verschicken verwendet wird (z. B.). {"x-amz-server-side-encryption" : "AES256"} Weitere mögliche Header finden Sie PutObjectin der Amazon Simple Storage Service API Reference.

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

  • disable_spill_encryption – (Optional) Bei Einstellung auf True, wird die Spill-Verschlüsselung deaktiviert. Die Standardeinstellung ist False so, dass Daten, die auf S3 übertragen werden, mit AES - verschlüsselt werden GCM — entweder mit einem zufällig generierten Schlüssel oder KMS zur Generierung 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 ein kontenübergreifendes Konto anzugeben AWS Gluekatalog. Standardmäßig versucht der Konnektor, Metadaten aus seinem eigenen System abzurufen AWS Glue Konto.

  • 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. Außerdem, wenn Ihre Lambda-Funktion nicht dieselbe ist AWS-Region als Datenquelle fallen für Sie höhere Standards an AWS regionsübergreifende Übertragungskosten aufgrund der höheren Bandbreitennutzung. Weitere Informationen zu den Kosten für regionsübergreifende Übertragungen finden Sie unter AWS Gebühren für Datenübertragungen für Server- und serverlose Architekturen finden Sie in AWS Blog zum Partnernetzwerk.

      • 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, führt Suchen ohne Berücksichtigung der Groß- und Kleinschreibung in Schema- und true Tabellennamen in Amazon DocumentDB durch. Der Standardwert ist false. Verwenden Sie diese Option, 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 unddocdb_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 verwenden AWS Secrets Manager für einen Teil oder den gesamten Wert für Ihre Verbindungszeichenfolgendetails. Um die Athena Federated Query-Funktion mit Secrets Manager zu verwenden, sollte die mit Ihrem Lambda VPC verbundene Funktion über einen Internetzugang oder einen VPCEndpunkt 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

Die Athena Query Federation versucht SDK automatisch, ein Secret mit dem Namen Secrets Manager abzurufen und diesen Wert anstelle docdb_instance_1_creds von einzufügen. ${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.

Einrichten von Datenbanken und Tabellen in AWS Glue

Da die integrierte Schemainferenzfunktion des Connectors eine begrenzte Anzahl von Dokumenten scannt und nur eine Teilmenge von Datentypen unterstützt, sollten Sie möglicherweise Folgendes verwenden AWS Glue stattdessen nach Metadaten.

Um ein zu aktivieren AWS Glue Tabelle zur Verwendung mit Amazon DocumentDB, Sie benötigen eine AWS Glue Datenbank und Tabelle für die DocumentDB-Datenbank und -Sammlung, für die Sie zusätzliche Metadaten bereitstellen möchten.

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

  2. Legen Sie die URI Eigenschaft der Datenbank fest, die eingeschlossen docdb-metadata-flagwerden soll.

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

  4. (Optional) Fügen Sie die columnMappingTabelleneigenschaft hinzu. Diese Eigenschaft definiert die Zuordnungen von Spaltennamen. Verwenden Sie diese Eigenschaft, wenn AWS Glue Regeln für die Benennung von Spalten verhindern das Erstellen eines AWS Glue Tabelle, die dieselben Spaltennamen wie die in Ihrer Amazon DocumentDB-Tabelle hat. Dies kann nützlich sein, da Großbuchstaben in Amazon DocumentDB DocumentDB-Spaltennamen zulässig sind, 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 hinzugefügt haben AWS Glue columnMappingTabelleneigenschaft, Sie können die disable_projection_and_casing Lambda-Umgebungsvariable entfernen.

  5. Stellen Sie sicher, dass Sie die geeigneten Datentypen verwenden für AWS Glue wie in diesem Dokument aufgeführt.

Datentypunterstützung

In diesem Abschnitt werden die Datentypen aufgeführt, die der DocumentDB-Konnektor für 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
TIMESTAMPSEC Datum
VARCHAR ObjectId
LIST Auflisten
STRUCT Dokument

AWS Glue Datentypen

Wenn du verwendest AWS Glue Für zusätzliche Metadaten 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
Boolean BIT
Binary VARBINARY
Zeichenfolge VARCHAR
Auflisten LIST
Struct STRUCT

Erforderliche Berechtigungen

Vollständige Informationen zu den IAM Richtlinien, die für diesen Connector erforderlich sind, finden Sie im Policies Abschnitt der Datei athena-docdb.yaml. 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 DocumentDB-Konnektor benötigt nur Lesezugriff auf den AWS Glue Data Catalog um Schemainformationen zu erhalten.

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

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

  • VPCZugriff — Der Konnektor benötigt die Fähigkeit, Schnittstellen an Ihren anzuhängen und zu trennen, VPC damit er sich mit ihm verbinden 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.

Passthrough-Abfragen

Der Athena Amazon DocumentDB DocumentDB-Connector unterstützt Passthrough-Abfragen und ist NO-basiert. SQL Informationen zum Abfragen von Amazon DocumentDB finden Sie unter Abfragen im Amazon DocumentDB Developer Guide.

Verwenden Sie die folgende Syntax, um Passthrough-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 Bill of Rights gefiltert.

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

Weitere Ressourcen