如何通过Boto3获取Athena查询的已扫描数据量?
如何通过Boto3获取Athena查询的“Data scanned”值
可以通过Boto3的get_query_execution接口获取该字段值,控制台中的“Data scanned”对应接口返回结果里的DataScannedInBytes字段,它记录了查询扫描的数据字节数。
修改后的代码示例
import boto3 import time athena_client = boto3.client('athena') # 启动查询 query_execution = athena_client.start_query_execution( QueryString=sql_query, ResultConfiguration={'OutputLocation': 's3://my_path'} ) query_execution_id = query_execution['QueryExecutionId'] query_status = None while query_status != 'SUCCEEDED': time.sleep(1) query_execution_details = athena_client.get_query_execution(QueryExecutionId=query_execution_id) query_status = query_execution_details['QueryExecution']['Status']['State'] if query_status not in ['QUEUED', 'RUNNING', 'SUCCEEDED']: raise Exception(f""" Athena query with ID {query_execution_id} failed or was cancelled. Status: {query_status} """) # 获取查询结果 query_result = athena_client.get_query_results(QueryExecutionId=query_execution_id) # 获取Data scanned数据 data_scanned_bytes = query_execution_details['QueryExecution']['Statistics']['DataScannedInBytes'] # 转换为更易读的GB单位(可选) data_scanned_gb = data_scanned_bytes / (1024 ** 3) print(f"Data scanned: {data_scanned_gb:.2f} GB")
说明
get_query_execution返回的QueryExecution.Statistics中包含了完整的查询元数据,除了DataScannedInBytes,还可以获取TotalExecutionTimeInMillis(总执行时长)、QueryQueueTimeInMillis(排队时长)等信息。- 只有当查询状态为
SUCCEEDED时,Statistics字段才会被填充,因此需确保在查询成功后再读取该字段。
内容的提问来源于stack exchange,提问作者Vince M
相关产品推荐
相关产品推荐

