← 中文资源

简体中文版本

数仓成本优化工作流

把数仓开销归因到查询与负载,砍掉昂贵低价值的尾部,并按团队设预算与看板。

阅读英文原文

目标

数仓成本只有被归属之后才可见:同一个计算资源同时服务着关键模型与被遗忘的仪表盘。顺序必须是先归因、再砍浪费、后设预算——不归因就砍,砍掉的往往是错误的东西。砍完后按团队配预算加看板,让消耗成为本地可见的量,浪费在下个月账单前自己消失。

步骤要点

  1. 归因成本到查询:把查询历史与资源消耗关联,排出近三十天最贵的查询、作业与仪表盘,标注负责人。
  2. 给昂贵尾部分类:关键业务、浪费型(无过滤全表扫、SELECT 星号)、被遗忘型(没人打开的报表),逐项给出下一步动作。
  3. 带证据砍浪费:补分区过滤器、缓存重复的仪表盘查询、带着使用统计让物主退役废弃报表,下个账期可测下降。
  4. 设团队预算与可见性:按团队分配额度,看板展示消耗对比预算,80% 与 100% 双档告警。
  5. 月度对照单位经济性复盘:成本对分析运行次数的比率、成本与用量趋势,产出下一批优化项与责任人。

排错提示

砍了之后账单没降说明归因不准或砍错对象,用次月账单回归验证预测节省;团队对自己的消耗无感是因为只有中心账单,预算看板要每天可见而不是月底才见;最贵的查询往往没加分区过滤,从成本榜前十里逐条看执行计划。

适用边界

成本归因粒度受查询标记纪律限制,未打 tag 的负载只能归到公共池;预算过紧会抑制合法分析,额度调整要跟着业务季度走。

代码示例

-- cost leaderboard (30d)
SELECT query_tag, warehouse, credits,
       round(credits * 2.30, 2) AS usd,
       owner_tag
FROM query_history_agg
ORDER BY credits DESC LIMIT 10;

-- findings:
--  dashboard_v7  (0 opens in 60d)     $1,842  retire
--  daily_rollup  (no partition filter) $1,204  +filter -> $88
--  ml_feature_etl (business critical)  $2,910  keep

-- team budgets (monthly credits)
--  analytics: 400   ml: 900   eng: 150  (alert 80%/100%)