Exécution de requêtes directes fédérées - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exécution de requêtes directes fédérées

Dans Athena, vous pouvez exécuter des requêtes sur des sources de données fédérées en utilisant le langage de requête de la source de données elle-même et transférer la requête complète vers la source de données pour exécution. Ces requêtes sont appelées requêtes passthrough. Pour exécuter des requêtes directes, vous devez utiliser une fonction de table dans votre requête Athena. Vous incluez la requête directe à exécuter sur la source de données dans l'un des arguments de la fonction de table. Les requêtes passthrough renvoient une table que vous pouvez analyser à l'aide d'Athena SQL.

Connecteurs pris en charge

Les connecteurs de source de données Athena suivants prennent en charge les requêtes directes.

Considérations et restrictions

Lorsque vous utilisez des requêtes directes dans Athena, tenez compte des points suivants :

  • Le transfert de requêtes n'est pris en charge que pour les instructions SELECT Athena ou les opérations de lecture.

  • Les requêtes passthrough doivent être exécutées dans le contexte du catalogue de la requête externe (c'est-à-dire de la requête qui appelle la fonction de table).

  • Les performances des requêtes peuvent varier en fonction de la configuration de la source de données.

  • Les requêtes directes ne sont pas prises en charge pour les vues.

Syntaxe

La syntaxe générale de transmission des requêtes Athena est la suivante.

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

Pour la plupart des sources de données, le premier et unique argument est query suivi de l'opérateur flèche => et de la chaîne de requête.

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

Pour des raisons de simplicité, vous pouvez omettre l'argument nommé facultatif query et l'opérateur => flèche.

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

Si la source de données nécessite plus que la chaîne de requête, utilisez des arguments nommés dans l'ordre attendu par la source de données. Par exemple, l'expression arg1 => 'arg1Value' contient le premier argument et sa valeur. Le nom arg1 est spécifique à la source de données et peut varier d'un connecteur à l'autre.

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

Pour plus d'informations sur la syntaxe exacte à utiliser avec un connecteur particulier, consultez la page du connecteur individuel.

Utilisation des guillemets

Les valeurs des arguments, y compris la chaîne de requête que vous transmettez, doivent être placées entre guillemets simples, comme dans l'exemple suivant.

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

Lorsque la chaîne de requête est entourée de guillemets, la requête échoue. La requête suivante échoue avec le message d'erreur COLUMN_NOT_FOUND : ligne 1:43 : La colonne 'select * from testdb.persons limit 10' ne peut pas être résolue.

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

Pour éviter un guillemet unique, ajoutez un seul guillemet à l'original (par exemple, terry's_group àterry''s_group).

Exemples

L'exemple de requête suivant permet de transférer une requête vers une source de données. La requête sélectionne toutes les colonnes de la customer table, limitant les résultats à 10.

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

L'instruction suivante exécute la même requête, mais élimine l'argument nommé facultatif query et l'opérateur flèche=>.

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