

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
<a name="connectors-postgresql"></a>

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

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
<a name="connectors-postgres-prerequisites"></a>
+ Stellen Sie den Konnektor für Ihr AWS-Konto mithilfe der Athena-Konsole oder AWS Serverless Application Repository bereit. Für weitere Informationen siehe [Eine Datenquellenverbindung erstellen](connect-to-a-data-source.md) oder [Verwenden Sie den AWS Serverless Application Repository , um einen Datenquellenconnector bereitzustellen](connect-data-source-serverless-app-repo.md).

## Einschränkungen
<a name="connectors-postgresql-limitations"></a>
+ 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)](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) im *AWS Lambda -Entwicklerhandbuch.*
+ Wie PostgreSQL behandelt Athena abschließende Leerzeichen in `CHAR`-PostgreSQL-Typen aus Längen- und Vergleichsgründen als semantisch unbedeutend. Beachten Sie, dass dies nur für `CHAR`-Typen gilt, nicht aber für `VARCHAR`-Typen. Athena ignoriert abschließende Leerzeichen für den `CHAR` Typ, behandelt sie jedoch als signifikant für den `VARCHAR`-Typ.
+ Wenn Sie den [Citext](https://www.postgresql.org/docs/current/citext.html)-Datentyp für Zeichenfolge ohne Berücksichtigung der Groß- und Kleinschreibung verwenden, verwendet PostgreSQL einen Datenvergleich ohne Berücksichtigung der Groß- und Kleinschreibung, der sich von Athena unterscheidet. Dieser Unterschied führt zu einer Datendiskrepanz bei SQL–`JOIN`-Vorgängen. Um dieses Problem zu umgehen, verwenden Sie die Passthrough-Abfragefeature des PostgreSQL-Konnektors. Weitere Informationen finden Sie im Abschnitt [Pass-Through-Abfragen](#connectors-postgres-passthrough-queries) weiter unten in diesem Dokument. 

## Bedingungen
<a name="connectors-postgresql-terms"></a>

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 bei Athena registrierter AWS Glue Katalog, der ein erforderliches Präfix für die `connection_string` Immobilie ist.
+ **Multiplex-Handler** – Ein Lambda-Handler, der mehrere Datenbankverbindungen akzeptieren und verwenden kann.

## Parameters
<a name="connectors-postgresql-parameters"></a>

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

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

### AWS Glue Data Catalog föderierte Konnektoren
<a name="connectors-postgresql-gc"></a>

Wir empfehlen, dass Sie einen PostgreSQL-Connector mithilfe eines Glue-Connections-Objekts konfigurieren. 

Setzen Sie dazu die `glue_connection`-Umgebungsvariable des PostgreSQL-Konnektors Lambda auf den Namen der zu verwendenden Glue-Connection.

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 POSTGRESQL
```

**Lambda-Umgebungseigenschaften**

Die folgenden Lambda-Umgebungseigenschaften gelten nur, wenn Sie den Connector mit einer Lambda-Funktion in Ihrem Konto verwenden.

**glue\_connection** – Gibt den Namen der Glue-Connection an, die dem Verbund-Connector zugeordnet ist. 

**Anmerkung**  
Alle Connectoren, die eine AWS Glue Data Catalog Verbundverbindung verwenden, müssen diese AWS Secrets Manager zum Speichern von Anmeldeinformationen verwenden.
Der mit einer AWS Glue Data Catalog Verbundverbindung erstellte PostgreSQL-Konnektor unterstützt die Verwendung eines Multiplexing-Handlers nicht.
Der PostgreSQL-Connector, der mit einer AWS Glue Data Catalog Verbundverbindung erstellt wurde, unterstützt nur 2. `ConnectionSchemaVersion`

### Verbundkonnektoren für den Athena-Datenkatalog
<a name="connectors-postgresql-connection-legacy"></a>

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](connect-data-source-serverless-app-repo.md) oder wenn die `glue_connection`-Umgebungseigenschaft nicht angegeben ist.

#### Verbindungszeichenfolge
<a name="connectors-postgresql-connection-string"></a>

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

```
postgres://${{{jdbc_connection_string}}}
```

#### Verwenden eines Multiplexing-Handlers
<a name="connectors-postgresql-using-a-multiplexing-handler"></a>

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
<a name="connectors-postgresql-multiplexing-handler-parameters"></a>


****  

| Parameter | Description | 
| --- | --- | 
| ${{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 verwendet wird. lambda:${ {{AWS\_LAMBDA\_FUNCTION\_NAME}} } | 

Die folgenden Beispieleigenschaften beziehen sich auf eine PostGreSql MUX-Lambda-Funktion, die zwei Datenbankinstanzen unterstützt: `postgres1` (Standard) und. `postgres2`


****  

| 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
<a name="connectors-postgresql-providing-credentials"></a>

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 Ihrer hartcodierten Geheimnisse nach AWS Secrets Manager finden Sie AWS Secrets Manager im Benutzerhandbuch unter [Move hardcoded secrets to](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html).AWS Secrets Manager *
+ **AWS Secrets Manager**— Um die Athena Federated Query-Funktion verwenden zu können AWS Secrets Manager, muss die mit Ihrer Lambda-Funktion verbundene VPC über [Internetzugang](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) oder einen [VPC-Endpunkt verfügen, um eine Verbindung zu Secrets](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) Manager herzustellen.

  Sie können den Namen eines Geheimnisses in AWS Secrets Manager Ihre 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, eine Rotation der Anmeldeinformationen zu verwenden AWS Secrets Manager . 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
<a name="connectors-postgresql-ssl"></a>

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
<a name="connectors-postgresql-using-a-single-connection-handler"></a>

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
<a name="connectors-postgresql-single-connection-handler-parameters"></a>


****  

| Parameter | Description | 
| --- | --- | 
| 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.


****  

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

#### Überlauf-Parameter
<a name="connectors-postgresql-spill-parameters"></a>

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 | Description | 
| --- | --- | 
| 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"}). Weitere mögliche Header finden Sie [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)in der Amazon Simple Storage Service API-Referenz. | 

## Datentypunterstützung
<a name="connectors-postgresql-data-type-support"></a>

Die folgende Tabelle zeigt die entsprechenden Datentypen für JDBC, PostGre SQL 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 | 
| Date | date | DateDay | 
| Zeitstempel | Zeitstempel | 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
<a name="connectors-postgresql-partitions-and-splits"></a>

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
<a name="connectors-postgresql-performance"></a>

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
<a name="connectors-postgres-performance-limit-clauses"></a>

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
<a name="connectors-postgres-performance-predicates"></a>

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
<a name="connectors-postgres-performance-pushdown-example"></a>

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;
```

## Pass-Through-Abfragen
<a name="connectors-postgres-passthrough-queries"></a>

Der PostgreSQL-Connector unterstützt [Pass-Through-Abfragen.](federated-query-passthrough.md) Pass-Through-Abfragen verwenden eine Tabellenfunktion, um Ihre vollständige Abfrage zur Ausführung an die Datenquelle weiterzuleiten.

Um Pass-Through-Abfragen mit PostgreSQL zu verwenden, können Sie die folgende Syntax verwenden:

```
SELECT * FROM TABLE(
        system.query(
            query => '{{query string}}'
        ))
```

Die folgende Beispielabfrage gibt eine Abfrage an eine Datenquelle in PostgreSQL weiter. Die Abfrage wählt alle Spalten in der `customer`-Tabelle aus und begrenzt die Ergebnisse auf 10.

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## Weitere Ressourcen
<a name="connectors-postgresql-additional-resources"></a>

Die neuesten Informationen zur JDBC-Treiberversion finden Sie in der Datei [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-postgresql/pom.xml) für den PostgreSQL-Connector auf .com. GitHub

Weitere Informationen zu diesem Connector finden Sie auf [der entsprechenden Website unter .com](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-postgresql). GitHub