You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Redshift Data API程序化获取查询的总扫描数据指标?

获取Redshift查询的「总扫描数据」指标(非内部表查询方式)

目前Redshift Data API的DescribeStatement接口确实不直接返回「总扫描数据」,但可以通过以下两种程序化方式获取:

方式一:利用CloudWatch Metrics API

Redshift会将查询的扫描数据量作为指标推送到CloudWatch,你可以通过CloudWatch的GetMetricData API获取:

  • 指标命名空间:AWS/Redshift
  • 指标名称:TotalScanBytes
  • 维度:需指定ClusterIdentifier(集群ID)和QueryId(查询ID)

调用示例(Python):

import boto3
import datetime

cloudwatch = boto3.client('cloudwatch')

response = cloudwatch.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'scan_bytes',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/Redshift',
                    'MetricName': 'TotalScanBytes',
                    'Dimensions': [
                        {'Name': 'ClusterIdentifier', 'Value': 'your-cluster-id'},
                        {'Name': 'QueryId', 'Value': 'your-query-id'}
                    ]
                },
                'Period': 300,
                'Stat': 'Sum'
            },
            'ReturnData': True
        }
    ],
    StartTime=datetime.datetime.utcnow() - datetime.timedelta(minutes=10),
    EndTime=datetime.datetime.utcnow()
)

注意:需确保Lambda角色拥有cloudwatch:GetMetricData权限,且查询完成后指标会有1-5分钟的延迟。

方式二:使用Redshift Data API的GetQueryExecution接口

通过redshift-data客户端的GetQueryExecution接口,部分场景下会返回包含TotalScanBytes的QueryExecutionStatistics字段。

调用示例(Python):

import boto3

redshift_data = boto3.client('redshift-data')

response = redshift_data.get_query_execution(
    QueryId='your-query-id'
)

total_scan_bytes = response['QueryExecutionStatistics'].get('TotalScanBytes')

注意:该字段的返回依赖查询类型和Redshift版本,只读查询(如SELECT)通常会返回,DDL/DML可能不返回。

关键注意点

  • 两种方式都需要先通过DescribeStatement获取查询ID(Id字段)
  • CloudWatch方式覆盖所有查询类型,但延迟较高;GetQueryExecution方式更实时,但有场景限制
  • 确保Lambda执行角色拥有对应API的调用权限

内容的提问来源于stack exchange,提问作者CustardBun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:09:52