Estou consultando uma tabela no Amazon Athena. Quero descobrir qual arquivo do Amazon Simple Storage Service (Amazon S3) é a origem de cada linha na saída ou quais linhas correspondem a um arquivo específico.
Descrição breve
- Para descobrir qual arquivo do Amazon S3 contém dados retornados por uma linha específica em uma tabela do Athena, execute uma consulta SELECT $path.
- Para descobrir quais linhas da tabela do Athena estão associadas a um arquivo específico do Amazon S3, execute uma consulta SELECT com a condição WHERE $path.
Essas consultas são úteis para investigar dados inesperados e criar consultas que exigem informações sobre os dados de origem.
Resolução
Antes de executar as consultas a seguir, verifique se você tem o seguinte:
- Uma tabela do Athena. Se você não tiver uma tabela, execute uma instrução CREATE TABLE.
- Um usuário ou perfil do AWS Identity and Access Management (IAM) que tenha permissões para executar consultas do Athena.
Para encontrar o arquivo S3 associado a uma linha de uma tabela do Athena:
1. Execute uma consulta SELECT em sua tabela para retornar os dados que você deseja:
SELECT * FROM "my_database"."my_table" WHERE year=2019;
2. Para encontrar o arquivo de origem do Amazon S3 para os dados, execute uma consulta semelhante à seguinte:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
A consulta retorna o caminho do Amazon S3 para os dados:
s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json
Para retornar as linhas da tabela Athena provenientes de um arquivo específico do Amazon S3:
1. Confirme o nome e a localização do objeto do Amazon S3 cujas linhas você deseja recuperar. Se você não souber o nome e a localização do objeto, execute o comando ls para listar objetos sob um bucket ou prefixo específico do S3. No exemplo a seguir, substitua s3://awsexamplebucket/my_table/my_partition/ pelo caminho da partição.
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
2. No Athena, execute uma consulta SELECT em sua tabela para retornar dados associados ao arquivo Amazon S3:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')
A consulta retorna dados que correspondem ao caminho do 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'
Essa consulta também oferece suporte a algumas funcionalidades curinga. Por exemplo, para retornar todos os dados que contêm parte do nome de um arquivo, execute uma consulta como esta:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", '\-02')
Essa consulta retorna todas as linhas com nomes de arquivo que contêm -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'
Informações relacionadas
Parquet SerDe
Conectar-se a fontes de dados