我希望 Amazon Athena 查詢結果能回傳每筆結果中 Amazon Simple Storage Service (Amazon S3) 來源檔案的位置。
簡短說明
您可以撰寫 Athena 查詢,以回傳查詢所傳回資料的來源檔案路徑。
- 若要找出包含 Athena 資料表中特定列所回傳資料的 Amazon S3 檔案,請執行 SELECT $path 查詢。
- 若要找出哪些 Athena 資料表列與特定的 Amazon S3 檔案相關聯,請使用 WHERE $path 條件執行 SELECT 查詢。
解決方法
**先決條件:**在執行本文中的查詢之前,您必須具備以下條件:
- Athena 資料表。如果您沒有資料表,請執行 CREATE TABLE 陳述式。
- 擁有執行 Athena 查詢權限的 AWS Identity and Access Management (IAM) 使用者或角色。
找出與 Athena 資料表列相關聯的 S3 檔案
若要找出 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
若找出來自特定 S3 檔案的 Athena 資料表列
若要找出 Athena 資料表中所有來自特定 S3 來源檔案的列,請參考以下步驟:
-
確認您要擷取其資料列之 Amazon S3 物件的名稱和位置。如果您不知道物件名稱和位置,請執行 ls 命令以列出特定 S3 儲存貯體或字首中的物件。在下列範例中,將 s3://awsexamplebucket/my_table/my_partition/ 替換為您的分割區路徑。
aws s3 ls s3://awsexamplebucket/my_table/my_partition/
-
若要回傳與該 Amazon S3 檔案相關聯的資料,請在 Athena 中對資料表執行 SELECT 查詢:
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'
Athena 查詢支援使用 regexp_like 函數的萬用字元功能。例如,若要回傳所有路徑中包含某字串的來源檔案資料,請執行類似下列查詢:
SELECT *, "$path" FROM "my_database"."my_table" WHERE regexp_like("$path", 'file-1')
此查詢會回傳所有檔案路徑名稱中包含 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'
相關資訊
Parquet SerDe
連線至資料來源
取得 Amazon S3 中來源資料的檔案位置