我在 Amazon Athena 中查詢資料表。我想找出哪個 Amazon Simple Storage Service (Amazon S3) 檔案是輸出中每行的來源,或者哪些行對應於特定檔案。
簡短描述
- 若要瞭解哪個 Amazon S3 檔案包含 Athena 資料表中特定列傳回的資料,請執行 SELECT $path 查詢。
- 若要瞭解哪些 Athena 資料表列與特定的 Amazon S3 檔案相關聯,請使用 WHERE $path 條件執行 SELECT 查詢。
這些查詢對於調查非預期的資料和建立需要來源資料相關資訊的查詢非常有用。
解決方法
在執行下列查詢之前,請確定您具備下列項目:
- Athena 資料表。如果您沒有資料表,請執行 CREATE TABLE 語句。
- 具有執行 Athena 查詢權限的 AWS 身分與存取管理 (IAM) 使用者或角色。
尋找與 Athena 資料表列相關聯的 S3 檔案:
- 針對您的資料表執行SELECT 查詢,以傳回您想要的資料:
SELECT * FROM "my_database"."my_table" WHERE year=2019;
- 若要尋找資料的 Amazon S3 來源檔案,請執行類似下列內容的查詢:
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
查詢會傳回資料的 Amazon S3 路徑:
s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json
若要傳回來自特定 Amazon S3 檔案的 Athena 資表列,請執行下列動作:
- 確認您要擷取其資料列之 Amazon S3 物件的名稱和位置。如果您不知道物件名稱和位置,請執行 ls 命令以列出特定 S3 儲存貯體或字首中的物件。在下列範例中,將 s3://awsexamplebucket/my_table/my_partition/ 替換為您的分割區路徑。
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
- 在 Athena 中,針對您的資料表執行 SELECT 查詢,以傳回與 Amazon S3 檔案相關聯的資料:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 's3://awsexamplebucket/my_table/my_partition/file-01.csv')
查詢會傳回符合 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'
此查詢也支援某些萬用字元功能。例如,若要傳回包含一部分檔案稱的所有資料,請執行如下查詢:
SELECT *,"$path" FROM "my_database"."my_table" WHERE regexp_like("$path", '\-02')
此查詢傳回包含**-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'
相關資訊
Parquet SerDe
連線至資料來源