簡短描述
排程查詢有許多使用案例,例如定期報表或定期載入新分區。根據您的使用案例,選擇以下其中一種方式在 Athena 中排程查詢:
- 建立 AWS Lambda 函式以排程查詢,然後 建立 Amazon EventBridge 規則以排程 Lambda 函式。
- 使用 AWS Step Functions 建立使用 Athena 的 ETL 管道。
- 在 Linux 機器上,使用 crontab 排程查詢。
- 使用 AWS Glue Python Shell 作業。
解決方法
使用 Lambda 函式與 EventBridge 規則排程 Athena 查詢
您可以使用 Lambda 函式與 EventBridge 規則來排程 Athena 查詢。要執行此操作,請完成以下步驟:
-
為 Lambda 建立 AWS Identity and Access Management (IAM) 服務角色。然後,附加允許存取 Athena、Amazon Simple Storage Service (Amazon S3) 和 Amazon CloudWatch Logs 的政策。例如,您可以將 AmazonAthenaFullAccess 和 CloudWatchLogsFullAccess 權限新增至角色。AmazonAthenaFullAccess 允許完全存取 Athena,並包括 Amazon S3 的基本權限。CloudWatchLogsFullAccess 允許完整存取 CloudWatch Logs。
-
開啟 Lambda console (Lambda 主控台)。
-
選擇 Create function (建立函式)。
-
確定已選取 Author from scratc (從頭開始製作),然後設定下列選項:
對於名稱,輸入函數的名稱。
對於執行時期,選擇其中一個 Python 選項。
在 Role(角色),選擇 Use an existing role(使用現有角色),然後選擇在步驟 1 建立的 IAM 角色。
-
選擇 Create function (建立函式)。
-
將您的程式碼貼至函式程式碼區段。下列範例使用 Python 3.7。取代範例中的下列值:
default:Athena 資料庫名稱
SELECT * FROM default.tb:您想要排程的查詢
s3://AWSDOC-EXAMPLE-BUCKET/:用於查詢輸出的 S3 儲存貯體
import boto3
# Query string to execute
query = 'SELECT * FROM database.tb'
# Database to execute the query against
DATABASE = 'database'
# Output location for query results
output='s3://OUTPUTBUCKET/'
def lambda_handler(event, context):
# Initiate the Boto3 Client
client = boto3.client('athena')
# Start the query execution
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': DATABASE
},
ResultConfiguration={
'OutputLocation': output
}
)
# Return response after starting the query execution
return response
-
選擇 Deploy (部署)。
-
開啟 Amazon EventBridge console (Amazon EventBridge 主控台)。
-
在導覽窗格中,選擇 Rules (規則),然後選擇 Create rule (建立規則)。
-
輸入規則的名稱和說明。
-
在 Define pattern(定義模式),選取 Schedule(排程)。
-
選取 Cron expression(Cron 表達式),然後輸入 cron expression。
-
在 Select event bus(選取事件匯流排),選取 AWS default event bus(AWS 預設事件匯流排)。
-
在 Select Targets(選取目標) 區段中,執行以下操作:
在 Target(目標),從下拉清單選取 Lambda function(Lambda 函式)。
在 Function(函式),從下拉清單選取您建立的 Lambda 函式名稱。
-
選擇 Create (建立)。
**注意:**每個帳戶對 Athena API 的呼叫次數都有配額。若您要排程多個查詢,請確認您未超出配額。如需詳細資訊,請參閱每個帳戶 API 呼叫配額。
使用 Step Functions 建立 ETL 管道
如果您使用 Step Functions 建立包含 Athena 的 ETL 管道,您可以使用 Step Functions 排程 Athena 查詢。
在 Linux 機器上使用 crontab
如果您使用 Linux 機器,則可以使用 crontab 排程 Athena 查詢。
使用 AWS Glue Python Shell 作業
您可以使用 AWS Glue Python shell 作業,透過 Athena Boto3 API 執行 Athena 查詢。然後,定義 AWS Glue 工作的排程。
相關資訊
教學課程: 為 AWS Lambda 函式建立 EventBridge 排程規則
在 Amazon EventBridge 中建立依排程執行的規則