Sto eseguendo una query su una tabella in Amazon Athena. Desidero scoprire il file Amazon Simple Storage Service (Amazon S3) all'origine di ogni riga dell'output o le righe corrispondenti a un file specifico.
Breve descrizione
- Per scoprire quale file Amazon S3 contiene i dati restituiti da una riga specifica in una tabella Athena, esegui una query SELECT $path.
- Per scoprire quali righe della tabella Athena sono associate a uno specifico file Amazon S3, esegui una query SELECT con la condizione WHERE $path.
Tali query sono utili per analizzare dati imprevisti e creare query che richiedono informazioni sui dati di origine.
Risoluzione
Prima di eseguire le seguenti query, assicurati di disporre di quanto segue:
- Una tabella Athena. Se non disponi di una tabella, esegui un'istruzione CREATE TABLE.
- Un utente o un ruolo di AWS Identity and Access Management (IAM) che dispone delle autorizzazioni per eseguire le query Athena.
Per trovare il file S3 associato a una riga di una tabella Athena:
1. Esegui una query SELECT sulla tua tabella per restituire i dati che desideri:
SELECT * FROM "my_database"."my_table" WHERE year=2019;
2. Per trovare il file sorgente Amazon S3 per i dati, esegui una query simile alla seguente:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
La query restituisce il percorso Amazon S3 per i dati:
s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json
Per restituire le righe della tabella Athena che provengono da uno specifico file Amazon S3:
1. Verifica il nome e la posizione dell'oggetto Amazon S3 per cui desideri recuperare le righe. Se non conosci il nome e la posizione dell'oggetto, esegui il comando ls per elencare gli oggetti sotto uno specifico bucket o prefisso S3. Nell'esempio seguente, sostituisci s3://awsexamplebucket/my_table/my_partition/ con il percorso della partizione.
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
2. In Athena, esegui una query SELECT sulla tua tabella per restituire i dati associati al file Amazon S3:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')
La query restituisce dati che corrispondono al percorso 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'
Questa query supporta anche alcune funzionalità dei caratteri jolly. Ad esempio, per restituire tutti i dati che contengono parte di un nome di file, esegui una query come la seguente:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", '\-02')
Questa query restituisce tutte le righe con nomi di file che contengono -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'
Informazioni correlate
Parquet SerDe
Connessione a origini dati