目标
数仓成本只有被归属之后才可见:同一个计算资源同时服务着关键模型与被遗忘的仪表盘。顺序必须是先归因、再砍浪费、后设预算——不归因就砍,砍掉的往往是错误的东西。砍完后按团队配预算加看板,让消耗成为本地可见的量,浪费在下个月账单前自己消失。
步骤要点
- 归因成本到查询:把查询历史与资源消耗关联,排出近三十天最贵的查询、作业与仪表盘,标注负责人。
- 给昂贵尾部分类:关键业务、浪费型(无过滤全表扫、SELECT 星号)、被遗忘型(没人打开的报表),逐项给出下一步动作。
- 带证据砍浪费:补分区过滤器、缓存重复的仪表盘查询、带着使用统计让物主退役废弃报表,下个账期可测下降。
- 设团队预算与可见性:按团队分配额度,看板展示消耗对比预算,80% 与 100% 双档告警。
- 月度对照单位经济性复盘:成本对分析运行次数的比率、成本与用量趋势,产出下一批优化项与责任人。
排错提示
砍了之后账单没降说明归因不准或砍错对象,用次月账单回归验证预测节省;团队对自己的消耗无感是因为只有中心账单,预算看板要每天可见而不是月底才见;最贵的查询往往没加分区过滤,从成本榜前十里逐条看执行计划。
适用边界
成本归因粒度受查询标记纪律限制,未打 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%)