Verwenden Sie föderierte Passthrough-Abfragen - 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.

Verwenden Sie föderierte Passthrough-Abfragen

In Athena können Sie Abfragen für föderierte Datenquellen mithilfe der Abfragesprache der Datenquelle selbst ausführen und die vollständige Abfrage zur Ausführung an die Datenquelle weiterleiten. Diese Abfragen werden Passthrough-Abfragen genannt. Um Passthrough-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

Die folgenden Athena-Datenquellenconnectors unterstützen Passthrough-Abfragen.

Überlegungen und Einschränkungen

Beachten Sie bei der Verwendung von Passthrough-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.

Syntax

Die allgemeine Passthrough-Syntax für Athena-Abfragen lautet 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 als Ziel.

  • system — Der Namespace, der die Funktion enthält. Alle Athena-Connector-Implementierungen verwenden diesen Namespace.

  • function_name — Der Name der Funktion, die die Passthrough-Abfrage an die Datenquelle weiterleitet. Dies wird oft aufgerufen. query 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 query folgen auf das erste und einzige Argument der Pfeiloperator => und die 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 sich von Konnektor zu Konnektor unterscheiden.

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

Die obigen Ausführungen können auch vereinfacht werden, indem die Argumentnamen weggelassen werden. Sie müssen jedoch die Reihenfolge der Signatur der Methode 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 Passthrough-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 föderierten Ansicht verwenden. Es gelten dieselben Einschränkungen. Weitere Informationen finden Sie unter Verbundansichten abfragen.

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

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

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

Wenn die Abfragezeichenfolge von doppelten Anführungszeichen umgeben ist, schlägt die Abfrage fehl. Die folgende Abfrage schlägt mit der Fehlermeldung COLUMN_ NOT _ fehlFOUND: Zeile 1:43: Die Spalte 'select * from testdb.persons limit 10' kann nicht aufgelö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. to). terry's_group terry''s_group

Beispiele

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 gekapselt werden, um die Wiederverwendung zu vereinfachen. Bei Verwendung mit einer Ansicht müssen Sie den vollständigen Auflösungspfad für die Funktionen verwenden.

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

Deaktivieren Sie den Query-Passthrough

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