

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.

# Verbund-Passthrough-Abfragen verwenden
<a name="federated-query-passthrough"></a>

In Athena können Sie Abfragen für Verbund-Datenquellen mithilfe der Abfragesprache der Datenquelle selbst ausführen und die vollständige Abfrage zur Ausführung an die Datenquelle weiterleiten. Diese Abfragen werden als Pass-Through-Abfragen bezeichnet. Um Pass-Through-Abfragen auszuführen, verwenden Sie eine Tabellenfunktion in Ihrer Athena-Abfrage. Sie schließen die Passthrough-Abfrage, die für die Datenquelle ausgeführt werden soll, in eines der Argumente der Tabellenfunktion ein. Pass-Through-Abfragen geben eine Tabelle zurück, die Sie mit Athena SQL analysieren können.

## Unterstützte Konnektoren
<a name="federated-query-passthrough-supported-connectors"></a>

Die folgenden Athena-Datenquellen-Connectoren unterstützen Pass-Through-Abfragen.
+ [Azure Data Lake Storage](connectors-adls-gen2.md)
+ [Azure Synapse](connectors-azure-synapse.md)
+ [Cloudera Hive](connectors-cloudera-hive.md)
+ [Cloudera Impala](connectors-cloudera-impala.md)
+ [CloudWatch](connectors-cloudwatch.md)
+ [Db2](connectors-ibm-db2.md)
+ [Db2 iSeries](connectors-ibm-db2-as400.md)
+ [DocumentDB](connectors-docdb.md) 
+ [DynamoDB](connectors-dynamodb.md) 
+ [HBase](connectors-hbase.md)
+ [Google BigQuery](connectors-bigquery.md)
+ [Hortonworks](connectors-hortonworks.md)
+ [MySQL](connectors-mysql.md)
+ [Neptune](connectors-neptune.md)
+ [OpenSearch](connectors-opensearch.md) 
+ [Oracle](connectors-oracle.md)
+ [PostgreSQL](connectors-postgresql.md)
+ [Redshift](connectors-redshift.md)
+ [SAP HANA](connectors-sap-hana.md)
+ [Snowflake](connectors-snowflake.md)
+ [SQL Server](connectors-microsoft-sql-server.md)
+ [Teradata](connectors-teradata.md)
+ [Timestream](connectors-timestream.md)
+ [Vertica](connectors-vertica.md)

## Überlegungen und Einschränkungen
<a name="federated-query-passthrough-considerations-and-limitations"></a>

Berücksichtigen Sie bei der Verwendung von Pass-Through-Abfragen in Athena die folgenden Punkte:
+ Query-Passthrough wird nur für `SELECT`-Athena-Anweisungen oder Lesevorgänge unterstützt.
+ Die Abfrageleistung kann je nach Konfiguration der Datenquelle variieren.
+ Pass-Through-Abfrage unterstützt die differenzierte Zugriffskontrolle von Lake Formation nicht.
+ Pass-Through-Abfragen werden für Datenquellen, die [als Glue-Datenkatalog registriert](register-connection-as-gdc.md) sind, nicht unterstützt.

## Syntax
<a name="federated-query-passthrough-syntax"></a>

Die allgemeine Athena Passthrough-Abfrage-Syntax ist wie folgt.

```
SELECT * FROM TABLE(catalog.system.function_name(arg1 => 'arg1Value'[, arg2 => 'arg2Value', ...]))
```

Beachten Sie Folgendes:
+ **catalog** – Der Name des Athena-Verbundkonnektors oder des Datenkatalogs, auf den verwiesen wird.
+ **system** – Der Namespace, der die Funktion enthält. Alle Athena-Connector-Implementierungen verwenden diesen Namespace.
+ **function\$1name** – Der Name der Funktion, die die Passthrough-Abfrage an die Datenquelle weiterleitet. Dies wird oft `query` genannt. Die Kombination `catalog.system.function_name` ist der vollständige Auflösungspfad für die Funktion.
+ **arg1, arg2 usw.** – Funktionsargumente. Der Benutzer muss diese an die Funktion übergeben. In den meisten Fällen ist dies die Abfragezeichenfolge, die an die Datenquelle weitergegeben wird.

Bei den meisten Datenquellen ist das erste und einzige Argument `query`, gefolgt vom Pfeiloperator `=>` und der Abfragezeichenfolge.

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

Der Einfachheit halber können Sie das optionale benannte Argument `query` und den Pfeiloperator `=>` weglassen.

```
SELECT * FROM TABLE(catalog.system.query('query string'))
```

Sie können die Abfrage weiter vereinfachen, indem Sie den `catalog`-Namen entfernen, wenn die Abfrage im Kontext des Zielkatalogs ausgeführt wird.

```
SELECT * FROM TABLE(system.query('query string'))
```

Wenn die Datenquelle mehr als die Abfragezeichenfolge benötigt, verwenden Sie benannte Argumente in der von der Datenquelle erwarteten Reihenfolge. Der Ausdruck `arg1 => 'arg1Value'` enthält beispielsweise das erste Argument und seinen Wert. Der Name *arg1* ist spezifisch für die Datenquelle und kann von Connector zu Connector unterschiedlich sein.

```
SELECT * FROM TABLE(
        system.query(
            arg1 => 'arg1Value',
            arg2 => 'arg2Value',
            arg3 => 'arg3Value'
        ));
```

Das Obige kann auch vereinfacht werden, indem die Argumentnamen weggelassen werden. Sie müssen jedoch die Reihenfolge der Methodensignatur einhalten. Weitere Informationen zur Signatur der Funktion finden Sie in der Dokumentation der einzelnen Konnektoren.

```
SELECT * FROM TABLE(catalog.system.query('arg1Value', 'arg2Value', 'arg3Value'))
```

Sie können mehrere Pass-Through-Abfragen über verschiedene Athena-Konnektoren ausführen, indem Sie den vollständigen Funktionsauflösungspfad verwenden, wie im folgenden Beispiel gezeigt.

```
SELECT c_customer_sk 
    FROM TABLE (postgresql.system.query('select * from customer limit 10'))
UNION
SELECT c_customer_sk 
    FROM TABLE(dynamodb.system.query('select * from customer')) LIMIT 10
```

Sie können Passthrough-Abfragen als Teil einer Verbund-Ansicht verwenden. Es gelten die gleichen Einschränkungen. Weitere Informationen zu finden Sie unter [Verbundansichten abfragen](https://docs.aws.amazon.com/athena/latest/ug/running-federated-queries.html#running-federated-queries-federated-views).

```
CREATE VIEW catalog.database.ViewName AS
    SELECT * FROM TABLE (
        catalog.system.query('query')
    )
```

Informationen zur genauen Syntax, die mit einem bestimmten Konnektor verwendet werden muss, finden Sie in der Dokumentation zu den einzelnen Konnektoren.

### Verwendung von Anführungszeichen
<a name="federated-query-passthrough-syntax-quotation-marks"></a>

Argumentwerte, einschließlich der von Ihnen übergebenen Abfragezeichenfolge, müssen in einfache Anführungszeichen eingeschlossen werden, wie im folgenden Beispiel.

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

Wenn die Abfragezeichenfolge von Anführungszeichen umgeben ist, schlägt die Abfrage fehl. Die folgende Abfrage schlägt mit der folgenden Fehlermeldung fehl COLUMN\$1NOT\$1FOUND: Zeile 1:43: Die Spalte 'select \$1 von testdb.persons limit 10' kann nicht gelöst werden.

```
SELECT * FROM TABLE(system.query(query => "SELECT * FROM testdb.persons LIMIT 10"))
```

Um ein einfaches Anführungszeichen zu umgehen, fügen Sie dem Original ein einfaches Anführungszeichen hinzu (z. B. `terry's_group` zu `terry''s_group`).

## Beispiele
<a name="federated-query-passthrough-sql-based-connectors-examples"></a>

Mit der folgenden Beispielabfrage wird eine Abfrage an eine Datenquelle weitergeleitet. Die Abfrage wählt alle Spalten in der `customer`-Tabelle aus und begrenzt die Ergebnisse auf 10.

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

Die folgende Anweisung führt dieselbe Abfrage aus, entfernt jedoch das optionale benannte Argument `query` und den Pfeiloperator `=>`.

```
SELECT * FROM TABLE(
        catalog.system.query(
            'SELECT * FROM customer LIMIT 10;'
        ))
```

Dies kann auch in einer Verbundansicht zusammengefasst werden, um die Wiederverwendung zu vereinfachen. Bei der Verwendung mit einer Ansicht müssen Sie den vollständigen Funktionsauflösungspfad verwenden.

```
CREATE VIEW AwsDataCatalog.default.example_view AS
    SELECT * FROM TABLE (
        catalog.system.query('SELECT * FROM customer LIMIT 10;')
    )
```

## Abmelden von Pass-Through-Abfrage
<a name="federated-query-passthrough-sql-based-connectors-opting-out"></a>

Um Passthrough-Abfragen zu deaktivieren, fügen Sie eine Lambda-Umgebungsvariable mit dem Namen `enable_query_passthrough` hinzu und setzen Sie sie auf `false`.