Quiero que los resultados de mi consulta de Amazon Athena devuelvan las ubicaciones de los archivos de origen de Amazon Simple Storage Service (Amazon S3) para cada fila de los resultados.
Descripción corta
Puedes escribir consultas de Athena que devuelven las rutas de los archivos de origen de los datos devueltos por la consulta.
- Para descubrir qué archivo de Amazon S3 contiene los datos devueltos por una fila específica de una tabla de Athena, ejecuta una consulta SELECT $path.
- Para descubrir qué filas de la tabla de Athena están asociadas a un archivo específico de Amazon S3, ejecuta una consulta SELECT con la condición WHERE $path.
Resolución
Requisitos previos: Antes de ejecutar las consultas de este artículo, debes disponer de lo siguiente:
- Una tabla de Athena. Si no tienes ninguna tabla, ejecuta una instrucción CREATE TABLE.
- Un usuario o rol de AWS Identity and Access Management (IAM) que tenga permisos para ejecutar consultas de Athena.
Búsqueda del archivo de S3 asociado a una fila de una tabla de Athena
Para buscar la ruta del archivo de origen de S3 para una fila de la tabla de Athena, ejecuta consultas similares a las de los siguientes ejemplos:
-
Para devolver los datos que deseas, ejecuta una consulta SELECT en la tabla:
SELECT * FROM "my_database"."my_table" WHERE year=2019;
-
Para encontrar el archivo de origen de Amazon S3 para los datos, ejecuta una consulta similar a la siguiente:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
La consulta anterior devuelve la ruta de Amazon S3 para los datos:
s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json
Búsqueda de las filas de la tabla de Athena que provienen de un archivo de S3 específico
Para buscar todas las filas de la tabla de Athena que tienen un archivo de origen de S3 específico, consulta los pasos siguientes:
-
Confirma el nombre y la ubicación del objeto de Amazon S3 del que desees recuperar las filas. Si no conoces el nombre y la ubicación del objeto, ejecuta el comando Is para enumerar los objetos bajo un bucket o prefijo específicos de S3. En el siguiente ejemplo, sustituye s3://awsexamplebucket/my_table/my_partition/ por la ruta de tu partición.
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
-
Para devolver los datos asociados al archivo de Amazon S3, en Athena, ejecuta una consulta SELECT en tu tabla:
SELECT *, "$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')
La consulta anterior devuelve datos que provienen de la ruta de Amazon S3 que especificaste:
id name year $path
3 John 1999 's3://awsexamplebucket/my_table/my_partition/file-01.csv'
4 Jane 2000 's3://awsexamplebucket/my_table/my_partition/file-01.csv'
Las consultas de Athena admiten la funcionalidad comodín con la función regexp_like. Por ejemplo, para devolver datos que provienen de todos los archivos de origen que comparten una cadena de caracteres en su ruta, ejecuta una consulta como la siguiente:
SELECT *, "$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 'file-1')
Esta consulta devuelve todas las filas con nombres de rutas de archivo que contienen file-1:
id name year $path
13 Mia 2009 's3://awsexamplebucket/my_table/my_partition/file-10.csv'
14 Mary 2010 's3://awsexamplebucket/my_table/my_partition/file-10.csv'
15 Max 2011 's3://awsexamplebucket/my_table/my_partition/file-11.csv'
16 Merriam 2012 's3://awsexamplebucket/my_table/my_partition/file-12.csv'
Información relacionada
El SerDe de Parquet
Conexión con orígenes de datos
Obtención de las ubicaciones de archivos para los datos de origen en Amazon S3