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

BigQuery账单字节统计与GCP成本仪表盘数值差异原因排查

BigQuery日志查询与成本仪表盘账单字节数差异排查

我希望导出BigQuery元数据以分析指定时段内查询的处理字节数,为此创建了GCP日志路由,使用以下过滤条件:

"protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.BigQueryAuditMetadata"

我尝试通过以下SQL查询提取2023-03-01至2023-03-16期间的总账单字节数:

#standardSQL
with base AS (
        SELECT
        resource.labels.location,
        protopayload_auditlog.resourceName,
        resource.type,
        protopayload_auditlog.authenticationInfo.principalEmail ,
        CAST(JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, "$.jobChange.job.jobStats.queryStats.cacheHit") AS BOOL) AS cacheHit,
        CAST(JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, "$.jobChange.job.jobStats.queryStats.totalBilledBytes") as INT64) AS totalBilledBytes,
        CAST(JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, "$.jobChange.job.jobStats.queryStats.totalProcessedBytes") as INT64) AS totalProcessedBytes,
        DATETIME(timestamp, "PST8PDT") as timestamp,
        FROM cloudaudit_googleapis_com_data_access
      )
      SELECT
        ROUND(sum(totalbilledbytes)/POW(2,40),3) as totalbilledbytes,
      FROM
        base
      WHERE
        timestamp >=  DATETIME(TIMESTAMP('2023-03-01 00:00:00','UTC'), "PST8PDT")
      AND
        timestamp <= DATETIME(TIMESTAMP('2023-03-16 23:59:59','UTC'), "PST8PDT")
      AND
        cacheHit is NULL
      AND  
        type = 'bigquery_project'
      AND 
        location = "EU"

查询结果显示该时段内消耗约2.061TiB账单字节,但GCP成本仪表盘显示的数值为1.99TiB,二者存在差异。我已尝试移除原始数据集重复项、更换时间范围、更换过滤条件等操作,但仍未解决问题,请问这种差异的原因是什么?


可能的差异原因

  • 缓存命中过滤逻辑错误:当前用cacheHit is NULL过滤,但实际缓存命中的查询cacheHit为true(不计费),非缓存命中的计费查询cacheHit为false。NULL的记录可能包含非查询类作业(如数据加载、导出作业),这些作业的totalBilledBytes被错误计入统计。正确过滤应为cacheHit = false,只统计实际产生计费的查询。
  • 时间范围对齐偏差:SQL中把UTC时间转换为PST8PDT后过滤,但成本仪表盘的时间统计可能严格遵循UTC时区,导致两端统计的时间窗口不完全匹配。比如你设置的PST起始时间对应UTC的3月1日08:00,而成本仪表盘可能统计UTC3月1日00:00到3月16日23:59的流量,两者时间范围存在重叠或遗漏。
  • 未过滤失败作业:日志中可能包含未成功完成的作业,这类作业的totalBilledBytes有记录但实际不会被计费,而成本仪表盘仅统计成功完成的作业。需要从metadataJson中提取作业状态(如$.jobChange.job.status.state),添加state = 'DONE'的过滤条件。
  • 资源类型过滤范围不当:你过滤了type = 'bigquery_project',但部分计费查询可能属于bigquery_dataset等其他资源类型,这些被成本仪表盘统计但被SQL排除;或者bigquery_project类型中包含了非查询类的计费操作,导致日志统计多算了字节数。
  • 计费精度与取整差异:BigQuery的计费字节数会按最小计费单位(如10MB)向上取整,日志中的totalBilledBytes是原始统计值,而成本仪表盘是按取整后的实际计费值累加,两者计算精度差异会导致总和出现偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:57