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

Der Amazon-Athena-PostgreSQL-Konnektor ermöglicht Athena den Zugriff auf Ihre PostgreSQL-Datenbanken.

Voraussetzungen

Einschränkungen

  • Schreiboperationen wie DDL werden nicht unterstützt.

  • In einem Multiplexer-Setup werden der Überlauf-Bucket und das Präfix von allen Datenbank-Instances gemeinsam genutzt.

  • Alle relevanten Lambda-Grenzwerte. Weitere Informationen finden Sie unter Lambda quotas (Lambda-Kontingente) im AWS Lambda-Entwicklerhandbuch.

Bedingungen

Die folgenden Begriffe beziehen sich auf den PostgreSQL-Konnektor.

  • Datenbank-Instance – Jede Instance einer Datenbank, die On-Premises, in Amazon EC2 oder auf Amazon RDS bereitgestellt wird.

  • Handler – Ein Lambda-Handler, der auf Ihre Datenbank-Instance zugreift. Ein Handler kann für Metadaten oder für Datensätze verwendet werden.

  • Metadaten-Handler – Ein Lambda-Handler, der Metadaten von Ihrer Datenbank-Instance abruft.

  • Record Handler – Ein Lambda-Handler, der Datensätze aus Ihrer Datenbank-Instance abruft.

  • Composite Handler – Ein Lambda-Handler, der sowohl Metadaten als auch Datensätze aus Ihrer Datenbank-Instance abruft.

  • Eigenschaft oder Parameter – Eine Datenbankeigenschaft, die von Handlern zum Extrahieren von Datenbankinformationen verwendet wird. Sie konfigurieren diese Eigenschaften als Lambda-Umgebungsvariablen.

  • Verbindungszeichenfolge – Eine Textzeichenfolge, die verwendet wird, um eine Verbindung zu einer Datenbank-Instance herzustellen.

  • Katalog – Ein Nicht-AWS Glue-Katalog, der bei Athena registriert ist und ein erforderliches Präfix für die connection_string-Eigenschaft darstellt.

  • Multiplex-Handler – Ein Lambda-Handler, der mehrere Datenbankverbindungen akzeptieren und verwenden kann.

Parameter

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

Verbindungszeichenfolge

Verwenden Sie eine JDBC-Verbindungszeichenfolge im folgenden Format, um eine Verbindung zu einer Datenbank-Instance herzustellen.

postgres://${jdbc_connection_string}

Verwenden eines Multiplexing-Handlers

Sie können einen Multiplexer verwenden, um mit einer einzigen Lambda-Funktion eine Verbindung zu mehreren Datenbank-Instances herzustellen. Anfragen werden anhand des Katalognamens weitergeleitet. Verwenden Sie die folgenden Klassen in Lambda.

Handler Klasse
Composite Handler PostGreSqlMuxCompositeHandler
Metadaten-Handler PostGreSqlMuxMetadataHandler
Record Handler PostGreSqlMuxRecordHandler

Multiplex-Handler-Parameter

Parameter Beschreibung
$catalog_connection_string Erforderlich. Eine Verbindungszeichenfolge einer Datenbank-Instance. Stellen Sie der Umgebungsvariablen den Namen des in Athena verwendeten Katalogs voran. Wenn zum Beispiel der bei Athena registrierte Katalog mypostgrescatalog ist, dann lautet der Name der Umgebungsvariablen mypostgrescatalog_connection_string.
default Erforderlich. Die standardmäßige Verbindungszeichenfolge. Diese Zeichenfolge wird verwendet, wenn der Katalog lambda:${AWS_LAMBDA_FUNCTION_NAME} ist.

Die folgenden Beispieleigenschaften gelten für eine PostgreSQL MUX Lambda-Funktion, die zwei Datenbankinstanzen unterstützt: postgres1 (die Standardeinstellung) und postgres2.

Property (Eigenschaft) Wert
default postgres://jdbc:postgresql://postgres1.host:5432/default?${Test/RDS/PostGres1}
postgres_catalog1_connection_string postgres://jdbc:postgresql://postgres1.host:5432/default?${Test/RDS/PostGres1}
postgres_catalog2_connection_string postgres://jdbc:postgresql://postgres2.host:5432/default?user=sample&password=sample

Bereitstellen von Anmeldeinformationen

Um einen Benutzernamen und ein Kennwort für Ihre Datenbank in Ihrer JDBC-Verbindungszeichenfolge anzugeben, können Sie Eigenschaften von Verbindungszeichenfolgen oder AWS Secrets Manager verwenden.

  • Verbindungszeichenfolge – Ein Benutzername und ein Kennwort können als Eigenschaften in der JDBC-Verbindungszeichenfolge angegeben werden.

    Wichtig

    Als bewährte Sicherheitsmethode sollten Sie keine fest kodierten Anmeldeinformationen in Ihren Umgebungsvariablen oder Verbindungszeichenfolgen verwenden. Informationen zum Verschieben von hartkodierten Geheimnissen nach AWS Secrets Manager finden Sie unter Verschieben von hartkodierten Geheimnissen nach AWS Secrets Manager im AWS Secrets Manager-Benutzerhandbuch.

  • AWS Secrets Manager – Um das Athena-Federated-Query-Feature mit AWS Secrets Manager zu verwenden, sollte die mit Ihrer Lambda-Funktion verbundene VPC über einen Internetzugang oder einen VPC-Endpunkt verfügen, um eine Verbindung zu Secrets Manager herzustellen.

    Sie können den Namen eines Secrets in AWS Secrets Manager in Ihrer JDBC-Verbindungszeichenfolge eingeben. Der Konnektor ersetzt den geheimen Namen durch username- und password-Werte von Secrets Manager.

    Für Amazon RDS-Datenbank-Instances ist diese Unterstützung eng integriert. Wenn Sie Amazon RDS verwenden, empfehlen wir dringend die Verwendung von AWS Secrets Manager und Wechsel der Anmeldeinformationen. Wenn Ihre Datenbank Amazon RDS nicht verwendet, speichern Sie die Anmeldeinformationen als JSON im folgenden Format:

    {"username": "${username}", "password": "${password}"}
Beispiel einer Verbindungszeichenfolge mit einem geheimen Namen

Die folgende Zeichenfolge hat den geheimen Namen ${Test/RDS/PostGres1}.

postgres://jdbc:postgresql://postgres1.host:5432/default?...&${Test/RDS/PostGres1}&...

Der Konnektor verwendet den geheimen Namen, um Secrets abzurufen und den Benutzernamen und das Kennwort bereitzustellen, wie im folgenden Beispiel gezeigt.

postgres://jdbc:postgresql://postgres1.host:5432/default?...&user=sample2&password=sample2&...

Derzeit erkennt der PostgreSQL-Konnektor die user- und password-JDBC-Eigenschaften.

Aktivieren von SSL

Um SSL in Ihrer PostgreSQL-Verbindung zu unterstützen, fügen Sie Folgendes an Ihre Verbindungszeichenfolge an:

&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
Beispiel

Die folgende Beispiel-Verbindungszeichenfolge verwendet kein SSL.

postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword

Um SSL zu aktivieren, ändern Sie die Zeichenfolge wie folgt.

postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory

Verwenden eines einzelnen Verbindungs-Handlers

Sie können die folgenden Einzelverbindungsmetadaten und Record Handler verwenden, um eine Verbindung zu einer einzelnen PostgreSQL-Instance herzustellen.

Handler-Typ Klasse
Composite Handler PostGreSqlCompositeHandler
Metadaten-Handler PostGreSqlMetadataHandler
Record Handler PostGreSqlRecordHandler

Parameter für Einzelverbindungs-Handler

Parameter Beschreibung
default Erforderlich. Die standardmäßige Verbindungszeichenfolge.

Die Einzelverbindungs-Handler unterstützen eine Datenbank-Instance und müssen einen default-Verbindungszeichenfolgenparameter bereitstellen. Alle anderen Verbindungszeichenfolgen werden ignoriert.

Die folgende Beispieleigenschaft gilt für eine einzelne PostgreSQL-Instance, die von einer Lambda-Funktion unterstützt wird.

Property (Eigenschaft) Wert
default postgres://jdbc:postgresql://postgres1.host:5432/default?secret=${Test/RDS/PostgreSQL1}

Überlauf-Parameter

Das Lambda-SDK kann Daten an Amazon S3 übertragen. Alle Datenbank-Instances, auf die mit derselben Lambda-Funktion zugegriffen wird, werden an denselben Speicherort verschoben.

Parameter Beschreibung
spill_bucket Erforderlich. Überlauf-Bucket-Name.
spill_prefix Erforderlich. Schlüssel-Prefix für den Überlauf-Bucket.
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.

Datentypunterstützung

Die folgende Tabelle zeigt die entsprechenden Datentypen für JDBC, PostGreSQL und Arrow.

JDBC PostGreSQL Arrow
Boolesch Boolesch Bit
Ganzzahl Tiny
Short smallint Smallint
Ganzzahl Ganzzahl Int
Long bigint Bigint
float float4 Float4
Double float8 Float8
Datum date Dateday
Zeitstempel timestamp DateMilli
Zeichenfolge text Varchar
Bytes bytes Varbinary
BigDecimal numeric(p,s) Dezimal
ARRAY N.z. (siehe Hinweis) Auflisten
Anmerkung

Der ARRAY-Type wird für den PostgreSQL-Konnektor mit den folgenden Einschränkungen unterstützt: Multidimensionale Arrays (<data_type>[][] oder verschachtelte Arrays) werden nicht unterstützt. Spalten mit nicht unterstützten ARRAY-Datentypen werden in ein Array von Zeichenfolgen-Elementen konvertiert (array<varchar>).

Partitionen und Splits

Partitionen werden verwendet, um zu bestimmen, wie Splits für den Konnektor generiert werden. Athena konstruiert eine synthetische Säule vom Typ varchar, die das Partitionierungsschema für die Tabelle darstellt, das dem Konnektor beim Generieren von Splits hilft. Der Konnektor ändert nicht die eigentliche Tabellendefinition.

Leistung

PostgreSQL unterstützt native Partitionen. Der Athena-PostgreSQL-Konnektor kann Daten von diesen Partitionen parallel abrufen. Wenn Sie sehr große Datenmengen mit einheitlicher Partitionsverteilung abfragen möchten, wird eine native Partitionierung dringend empfohlen.

Der Athena-PostgreSQL-Konnektor führt einen Prädikat-Pushdown durch, um die Anzahl der von der Abfrage gescannten Daten zu reduzieren. LIMIT-Klauseln, einfache Prädikate und komplexe Ausdrücke werden an den Konnektor übertragen, um die Menge der gescannten Daten zu reduzieren und die Laufzeit der Abfrage zu verkürzen. Die Auswahl einer Teilmenge von Spalten führt jedoch manchmal zu einer längeren Laufzeit der Abfrageausführung.

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. Der Athena-PostgreSQL-Konnektor kann diese Ausdrücke kombinieren und sie direkt an PostgreSQL weiterleiten, um die Funktionalität zu erweitern und die Menge der gescannten Daten zu reduzieren.

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

  • Boolean: UND, ODER, NICHT

  • Gleichheit: GLEICH, NICHT-GLEICH, WENIGER_ALS, WENIGER_ODER-GLEICH, GRÖSSER_ALS, GRÖSSER_ODER-GLEICH, IST_UNTERSCHIEDEN VON, NULL_WENN, IST_NULL

  • Arithmetik: ADDIEREN, SUBTRAHIEREN, MULTIPLIZIEREN, DIVIDIEREN, MODULIEREN, NEGIEREN

  • Andere: WIE_MUSTER, IN

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_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') LIMIT 10;

Weitere Informationen finden Sie auch unter

Die neuesten Informationen zur JDBC-Treiberversion finden Sie in der pom.xml-Datei für den PostgreSQL-Konnektor auf GitHub.com.

Weitere Informationen zu diesem Konnektor finden Sie unter der entsprechenden Seite auf GitHub.com.