如何量化Looker中查询Dashboard产生的BigQuery成本?
量化Looker Dashboard对应的BigQuery查询成本方案
方案1:利用Looker Query Tags 关联查询与Dashboard
这是最直接的官方方案,通过给Looker查询添加自定义标签,让BigQuery能识别查询所属的Dashboard、Tile及用户信息:
- 在LookML的Explore或View层级配置
query_tag,动态注入Dashboard、Tile和用户标识:
标签会自动附加到所有从该Explore生成的查询中,包括Dashboard Tile的查询。explore: sales { query_tag: "{{ _user.email }}|{{ dashboard.id if dashboard else 'standalone' }}|{{ dashboard_element.id if dashboard_element else 'none' }}" } - 在BigQuery中,通过
INFORMATION_SCHEMA.JOBS_BY_PROJECT视图提取query_tag字段,拆分出用户邮箱、Dashboard ID、Tile ID:SELECT SPLIT(query_tag, '|')[OFFSET(0)] AS looker_user, SPLIT(query_tag, '|')[OFFSET(1)] AS dashboard_id, SPLIT(query_tag, '|')[OFFSET(2)] AS tile_id, total_bytes_processed, (total_bytes_processed / 1024 / 1024 / 1024) * 5 AS cost_usd -- 按BigQuery按需定价计算 FROM `your-project-id.INFORMATION_SCHEMA.JOBS_BY_PROJECT` WHERE job_type = 'QUERY' AND query_tag IS NOT NULL - 再通过Looker导出Dashboard列表(或API获取),将
dashboard_id映射为Dashboard名称,即可按Dashboard统计月度成本。
方案2:通过Looker API关联查询历史与BigQuery日志
利用Looker API获取查询与Dashboard的关联关系,再匹配BigQuery的成本数据:
- 调用Looker的
GET /api/3.0/queries接口,获取所有查询记录,其中dashboard_id和dashboard_element_id字段会标记该查询是否来自Dashboard Tile。 - 提取查询记录中的
sql字段生成哈希值,或直接匹配Looker返回的bigquery_job_id(若开启相关配置),关联BigQuery的INFORMATION_SCHEMA.JOBS_BY_PROJECT中的对应字段。 - 结合BigQuery的
total_bytes_processed和定价公式,计算每个Dashboard的总成本,同时按user_id字段统计用户维度的查询数据量。
方案3:优化临时表的匹配逻辑(适合无法修改LookML的场景)
如果无法修改LookML,可通过以下方式改进现有临时表的匹配效率:
- 提取Looker生成SQL中的
__LOOKER_MODEL__、__LOOKER_EXPLORE__内置变量,这些变量不会被剥离,可作为查询的来源标识。 - 结合BigQuery的
session_user()(对应Looker用户邮箱)和查询时间戳,关联Looker系统日志中的Dashboard访问记录(可在Looker Admin > System Logs导出),匹配同一时间段内用户访问的Dashboard与执行的查询。 - 对相似SQL的Tile,可通过Looker的Tile名称(从API获取)与查询结果的字段组合进行模糊匹配,减少手动排查的工作量。
内容的提问来源于stack exchange,提问作者krz
相关产品推荐
相关产品推荐

