Uso de consultas de acceso directo federadas - Amazon Athena

Uso de consultas de acceso directo federadas

En Athena, puede ejecutar consultas en orígenes de datos federados utilizando el lenguaje de consulta del propio origen de datos y enviar la consulta completa al origen de datos para su ejecución. Estas consultas se denominan consultas de acceso directo. Para ejecutar consultas de acceso directo, utilice una función de tabla en la consulta de Athena. Incluya la consulta de acceso directo que se ejecutará en el origen de datos en uno de los argumentos de la función de tabla. Las consultas de acceso directo devuelven una tabla que puede analizar con Athena SQL.

Conectores admitidos

Los siguientes conectores de orígenes de datos de Athena admiten consultas de acceso directo.

Consideraciones y limitaciones

Cuando utilice las consultas de acceso directo en Athena, tenga en cuenta los siguientes puntos:

  • El acceso directo de consultas solo se admite para las instrucciones de SELECT u operaciones de lectura de Athena.

  • Las consultas de acceso directo deben ejecutarse en el contexto del catálogo de la consulta externa (es decir, la consulta que llama a la función de tabla).

  • El rendimiento de las consultas puede variar en función de la configuración del origen de datos.

  • No se admiten las consultas de acceso directo en las vistas.

Sintaxis

La sintaxis general del acceso directo de las consultas de Athena es la siguiente.

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

En la mayoría de los orígenes de datos, el primer y único argumento es query seguido del operador de flecha => y la cadena de consulta.

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

Para simplificar, puede omitir el argumento con nombre opcional query y el operador de flecha =>.

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

Si el origen de datos requiere más que la cadena de consulta, utilice los argumentos con nombre en el orden esperado por el origen de datos. Por ejemplo, la expresión arg1 => 'arg1Value' contiene el primer argumento y su valor. El nombre arg1 es específico del origen de datos y puede variar de un conector a otro.

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

Para obtener información sobre la sintaxis exacta que se debe utilizar con un conector concreto, consulte la página del conector individual.

Uso de comillas

Los valores de los argumentos, incluida la cadena de consulta que pase, deben escribirse entre comillas simples, como en el siguiente ejemplo.

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

Cuando la cadena de consulta está entre comillas dobles, la consulta falla. Se produce un error en la siguiente consulta y aparece el mensaje de error COLUMNA_NO_ENCONTRADA: línea 1:43: Columna 'seleccionar * de testdb.persons límite 10' no se puede resolver.

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

Para evitar una comilla simple, añada una comilla simple al original (por ejemplo, terry's_group a terry''s_group).

Ejemplos

El siguiente ejemplo de consulta envía una consulta a un origen de datos. La consulta selecciona todas las columnas de la tabla customer y limita los resultados a 10.

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

La siguiente instrucción ejecuta la misma consulta, pero elimina el argumento con nombre opcional query y el operador de flecha =>.

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