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

如何设置BigQuery查询超阈值(如20GB)的邮件通知?

实现BigQuery大查询(>20GB)的邮件通知方案

完全可以实现你的需求!下面是一套基于Cloud Logging(原Stackdriver Logging)+ BigQuery + Cloud Monitoring/Cloud Functions的完整方案,一步步来:

1. 导出BigQuery查询日志到专属BigQuery表

首先得把BigQuery的查询操作日志收集起来,具体操作:

  • 打开Cloud Logging控制台,进入日志导出页面
  • 创建新的导出,选择BigQuery作为目标
  • 在日志过滤器里输入:
    resource.type="bigquery_resource"
    protoPayload.methodName="jobservice.jobcompleted"
    protoPayload.serviceData.jobCompletedEvent.job.jobType="QUERY"
    
    这个过滤器只保留查询完成的日志,排除加载/导出等其他操作
  • 选择或创建一个BigQuery数据集来存储导出的日志表,日志表会自动按日期分区,方便后续查询

2. 编写查询筛选超过20GB的查询

导出的日志表结构里,protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBytesProcessed字段记录了查询处理的总字节数。我们可以创建一个视图来快速筛选符合阈值的查询:

CREATE VIEW `your-project.your-dataset.large_queries_view` AS
SELECT
  TIMESTAMP_TRUNC(protoPayload.startTime, SECOND) AS query_start_time,
  protoPayload.authenticationInfo.principalEmail AS user_email,
  protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query AS query_sql,
  SAFE_CAST(protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBytesProcessed AS INT64)/POW(1024,3) AS total_gb_processed,
  protoPayload.serviceData.jobCompletedEvent.job.jobId AS job_id
FROM
  `your-project.your-dataset.cloudaudit_googleapis_com_data_access_*`
WHERE
  _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)) -- 最近7天的日志,可调整
  AND SAFE_CAST(protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBytesProcessed AS INT64)/POW(1024,3) > 20
ORDER BY
  total_gb_processed DESC;

这个视图会提取查询发起时间、用户邮箱、SQL语句、处理的GB数和作业ID,方便后续核查。

3. 配置邮件通知

有两种常用的方式来实现邮件告警:

方式一:用Cloud Monitoring告警策略(推荐)

  • 打开Cloud Monitoring控制台,进入告警 > 创建策略
  • 添加条件:
    • 选择日志匹配作为信号类型
    • 输入之前的日志过滤器,再加上字节数筛选:
      resource.type="bigquery_resource"
      protoPayload.methodName="jobservice.jobcompleted"
      protoPayload.serviceData.jobCompletedEvent.job.jobType="QUERY"
      protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBytesProcessed > 21474836480 -- 20GB = 20*1024^3字节
      
    • 设置告警触发条件为“任何匹配的日志条目”
  • 配置通知渠道:添加一个邮件通知渠道,输入你要接收通知的邮箱
  • 设置告警名称和描述,保存策略。之后只要有超过20GB的查询,你就会收到邮件,邮件里会包含查询的关键信息

方式二:用BigQuery定时查询 + Cloud Functions(灵活自定义通知内容)

如果需要更定制化的通知内容(比如把多个大查询汇总成一封邮件),可以这么做:

  • 创建一个BigQuery定时查询,定期运行上面的large_queries_view,把结果写入一个临时表
  • 配置Cloud Functions,当临时表有新数据时触发(用Cloud Storage作为中间介质,或者直接用BigQuery的事件触发器)
  • 在Cloud Functions里编写代码,读取临时表的数据,生成格式化的邮件内容,用Gmail API或者Cloud SendGrid发送邮件到你的邮箱

注意事项

  • 确保你有足够的权限:日志导出的权限、BigQuery数据集的读写权限、Cloud Monitoring/Cloud Functions的配置权限
  • 日志导出会有一定的延迟(通常几分钟),所以告警不会实时触发,但足够满足你的核查需求
  • 可以根据需要调整阈值(比如改成10GB或50GB),只要修改SQL或日志过滤器里的数值就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:44:28