GCP BigQuery如何识别高频查询执行用户及获取核心运行统计指标
所有统计需求完全可以通过GCP原生的BigQuery系统元数据、审计日志能力实现,不需要额外采购第三方监控工具,可直接为资源治理、效能分析提供量化数据支撑。
核心依赖数据源
整套统计逻辑不需要跨平台对接额外系统,两个GCP原生数据源即可覆盖所有需求:
- BigQuery 区域级的
INFORMATION_SCHEMA作业元数据视图,可直接获取所有作业的执行时间、发起人、处理数据量、执行状态等核心字段 - Cloud Audit Logs 中收集的BigQuery访问类日志,可补充用户身份的明细信息,配合GCP目录服务完成用户姓名的关联匹配
对应需求的具体实现逻辑
每日访问用户数统计 + 用户姓名匹配
统计每日真实访问BigQuery的自然人用户规模时,首先从作业元数据中提取当日所有发起过查询、数据加载、导出操作的去重用户邮箱列表。由于元数据中默认存储的用户标识为账号邮箱,要匹配对应用户的真实姓名,只需要通过GCP目录服务的用户信息接口,以邮箱为关联键拉取账号对应的显示姓名,整合到统计结果中即可。
注意:统计时需要单独筛除服务账号的访问记录,和自然人用户做明确区分,避免统计口径偏离“实际使用产品的自然人用户”的定义。
按用户维度的单日累计查询执行量统计
这部分统计完全可以通过单条查询BigQuery系统视图实现,不需要跨表关联,核心统计逻辑如下:
- 按作业创建时间的自然日切分统计周期
- 以用户邮箱为分组维度
- 过滤掉作业类型非查询、状态为未完成/已取消、执行报错的无效作业
- 对有效作业的唯一作业ID做计数,即可得到单用户单日的累计查询量
核心参考SQL示例:
SELECT DATE(creation_time) AS stat_date, user_email, COUNT(DISTINCT job_id) AS daily_valid_query_count FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION WHERE job_type = 'QUERY' AND state = 'DONE' AND error_result IS NULL GROUP BY stat_date, user_email
补充提示:系统视图默认仅保留近180天的作业元数据,做长期资源治理分析时,需要每日将统计结果同步到自建的永久存储数据集内,避免历史数据过期丢失。
单条查询平均数据使用量统计 + 查询量Top用户定位
单条查询的平均数据使用量可直接通过系统视图中的total_bytes_processed字段计算得到——即对统计周期内所有有效查询的处理数据量求平均值,即可得到单条查询的平均资源消耗水平。如果需要更细的分析,还可以按用户维度分别计算单条查询的平均数据使用量,对比不同用户的查询资源效率。
要定位平台内执行查询总量最高的主体用户,只需要在按用户分组的单日查询量统计结果上,按查询总量做倒序排序,取排名靠前的主体即可。
口径提示:定位Top用户前需要明确“主体用户”的定义——是仅统计自然人用户,还是需要按部门聚合、是否纳入服务账号的批量跑批作业,避免出现无业务参考价值的统计结果。
落地注意事项
- 权限要求:执行统计任务的账号仅需要BigQuery元数据读取、Cloud Logging查询权限,整个统计过程仅读取元数据,不会触达用户实际查询的业务数据内容,完全符合数据合规要求
- 结果去重:统计查询量时需要排除BigQuery自动触发的元数据探查查询、缓存命中的零成本查询,避免统计结果虚高
- 关联实时性:用户姓名匹配时建议实时从目录服务拉取最新信息,不要使用静态映射表,避免出现用户改名后统计结果不同步的问题
内容的提问来源于stack exchange,提问作者Shubham Sharma

