Usar consultas de passagem federadas - Amazon Athena

Usar consultas de passagem federadas

No Athena, você pode realizar consultas em fontes de dados federadas usando a linguagem de consulta da própria fonte de dados e enviar a consulta completa para execução na fonte de dados. Essas consultas são chamadas de consultas de passagem. Para executar consultas de passagem, você usa uma função de tabela na sua consulta do Athena. Você inclui em um dos argumentos da função de tabela a consulta de passagem que será realizada na fonte de dados. As consultas de passagem retornam uma tabela que você pode analisar usando o Athena SQL.

Conectores compatíveis

Os seguintes conectores de fonte de dados do Athena são compatíveis com consultas de passagem.

Considerações e limitações

Ao usar consultas de passagem no Athena, considere os seguintes pontos:

  • A passagem de consultas só é compatível com instruções SELECT ou operações de leitura do Athena.

  • As consultas de passagem devem ser realizadas dentro do contexto do catálogo da consulta externa (ou seja, a consulta que chama a função de tabela).

  • O desempenho da consulta poderá variar de acordo com a configuração da fonte de dados.

  • Não há compatibilidade com consultas de passagem para exibições.

Sintaxe

A sintaxe geral de passagem de consultas do Athena é a seguinte.

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

Para a maioria das fontes de dados, o primeiro e único argumento é query, seguido pelo operador de seta => e pela string de consulta.

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

Para simplificar, você pode omitir o argumento nomeado opcional query e o operador de seta =>.

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

Se a fonte de dados exigir mais do que a string de consulta, use argumentos nomeados na ordem esperada pela fonte de dados. Por exemplo, a expressão arg1 => 'arg1Value' contém o primeiro argumento e seu valor. O nome arg1 é específico da fonte de dados e pode diferir entre os conectores.

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

Para obter informações sobre a sintaxe exata a ser usada com um conector específico, consulte a página do conector desejado.

Uso de aspas

Os valores dos argumentos, incluindo a string de consulta que você transmite, devem estar entre aspas simples, como no exemplo a seguir.

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

Quando a string de consulta estiver entre aspas duplas, a consulta vai falhar. A consulta a seguir falha com a mensagem de erro COLUMN_NOT_FOUND: line 1:43: Column 'select * from testdb.persons limit 10' cannot be resolved.

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

Para escapar uma aspas simples, adicione uma aspas simples ao original (p. ex., terry's_group para terry''s_group).

Exemplos

O exemplo de consulta a seguir envia uma consulta para uma fonte de dados. A consulta seleciona todas as colunas na tabela customer, limitando os resultados a 10.

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

A instrução a seguir executa a mesma consulta, mas elimina o argumento nomeado opcional query e o operador de seta =>.

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