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.
Utiliser des requêtes passthrough 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'AthenaSQL.
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
contient le premier argument et sa valeur. Le nom arg1
=>
'arg1Value
'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;' ))