Estoy consultando una tabla en Amazon Athena. Quiero saber qué archivo de Amazon Simple Storage Service (Amazon S3) es el origen de cada fila de la salida o qué filas corresponden a un archivo específico.
Breve descripción
- Para averiguar qué archivo de Amazon S3 contiene los datos devueltos por una fila específica de una tabla de Athena, ejecute una consulta SELECT $path.
- Para averiguar qué filas de la tabla de Athena están asociadas a un archivo específico de Amazon S3, ejecute una consulta SELECT con la condición WHERE $path.
Estas consultas son útiles para investigar datos inesperados y crear consultas que requieran información sobre los datos de origen.
Resolución
Antes de ejecutar las siguientes consultas, asegúrese de disponer de lo siguiente:
- Una tabla de Athena. Si no tiene ninguna tabla, ejecute la declaración CREATE TABLE.
- Un usuario o rol de AWS Identity and Access Management (IAM) que tenga permisos para ejecutar consultas de Athena.
Para buscar el archivo de S3 asociado a una fila de una tabla de Athena:
1.Ejecute una consulta SELECT en la tabla para obtener los datos que desee:
SELECT * FROM "my_database"."my_table" WHERE year=2019;
2.Para encontrar el archivo de origen de Amazon S3 para los datos, ejecute una consulta similar a la siguiente:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
La consulta devuelve la ruta de Amazon S3 para los datos:
s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json
Para devolver las filas de la tabla de Athena que se originan en un archivo específico de Amazon S3:
1.Confirme el nombre y la ubicación del objeto de Amazon S3 del que desee recuperar las filas. Si no conoce el nombre y la ubicación del objeto, ejecute el comando Is para enumerar los objetos bajo un bucket o prefijo específicos de S3. En el siguiente ejemplo, sustituya s3://awsexamplebucket/my_table/my_partition/ por la ruta de su partición.
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
2.En Athena, ejecute una consulta SELECT en su tabla para devolver los datos asociados al archivo de Amazon S3:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')
La consulta devuelve datos que coinciden con la ruta de Amazon S3:
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'
Esta consulta también admite algunas funciones comodín. Por ejemplo, para devolver todos los datos que contienen parte de un nombre de archivo, ejecute una consulta como esta:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", '\-02')
Esta consulta devuelve todas las filas con nombres de archivo que contienen -02:
id name year $path
13 Mia 2009 's3://awsexamplebucket/my_table/my_partition/file-02.csv'
14 Mary 2010 's3://awsexamplebucket/my_table/my_partition/file-02.csv'
15 Max 2011 's3://awsexamplebucket/my_table/my_partition/file-02.csv'
16 Merriam 2012 's3://awsexamplebucket/my_table/my_partition/file-02.csv'
Información relacionada
El SerDe de Parquet
Conexión con orígenes de datos