关于BigQuery细粒度查询计费及访问统计信息的技术问询
BigQuery细粒度查询成本与表访问统计方案
1. 按表统计TotalBilledBytes/ReadBytes
可以通过BigQuery的INFORMATION_SCHEMA内置视图直接获取单查询中各访问表的字节消耗数据,核心使用INFORMATION_SCHEMA.JOB_STATISTICS_BY_TABLE视图,该视图会按作业+表维度统计字节处理与计费数据:
查询示例
SELECT job_id, table_catalog, table_schema, table_name, total_bytes_processed AS read_bytes, total_bytes_billed AS billed_bytes FROM `your-project-id`.`region-us`.INFORMATION_SCHEMA.JOB_STATISTICS_BY_TABLE WHERE start_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) ORDER BY billed_bytes DESC;
该查询会返回最近7天内所有作业中,每张被访问表的读取字节量和计费字节量,直接定位高成本表。
2. 获取读取分区数量
同样在INFORMATION_SCHEMA.JOB_STATISTICS_BY_TABLE视图中,total_partitions_processed字段会记录查询针对分区表读取的分区数量,只需在上述查询中加入该字段即可:
SELECT -- 保留其他需要的字段 total_partitions_processed FROM `your-project-id`.`region-us`.INFORMATION_SCHEMA.JOB_STATISTICS_BY_TABLE -- 添加时间或作业过滤条件
3. 提取表级过滤条件
BigQuery不会直接存储单表对应的过滤条件,但可以通过解析作业的查询计划获取相关信息:
- 用
INFORMATION_SCHEMA.JOB_QUERY_STATISTICS视图中的query_plan字段(JSON格式),该字段包含查询执行的每一步详情,其中filter类型的节点会记录应用在表上的过滤逻辑,可结合BigQuery的JSON函数(如JSON_EXTRACT)批量提取规则。 - 也可以通过命令行工具查看单作业的详细计划,执行命令:
bq show --format=prettyjson your-project-id:us.job_abc123xyz
在返回的JSON中,定位到queryPlan数组里的scan节点,其filter字段会显示针对该表的过滤条件。
内容的提问来源于stack exchange,提问作者Alex Lipkin
相关产品推荐
相关产品推荐

