← 全部文章

dbt State 永久免费:每月 1,000 个 DATT 值 94 美元,省更多要看仓库账单

两本叠放的旧书,上面一本的书页间夹着一根淡紫色流苏书签,垂到书脊外
封面 · 来源: Abigail Ybarra / Unsplash
目录
  1. 它只在结果会变的时候才重建
  2. 三个环境共用一份状态,都以生产为基准
  3. 免费额度最多值每月 94 美元

dbt Labs 10 月 20 日宣布,dbt State 对自托管 dbt 用户永久免费:每月 1,000 个 DATT,不用绑卡,也不用签合同。1dbt State 是一个独立服务,在多次 dbt 运行之间共享状态,让后面的构建复用前面的结果。它支持 Snowflake、BigQuery、Databricks 和 Redshift,自托管 dbt、dbt 平台、Airflow、Dagster 里都能用,但必须登录一个 dbt 账号。14dbt 1.13 和 v2 原生支持,1.7 到 1.12 以插件接入。4

DATT(每日活跃目标表)是它的计费单位。一天之内(按 UTC 算),dbt State 对某个目标做过一次跳过、克隆或测试复用,这个目标就算 1 个 DATT,当天再复用多少次都不另算。种子、快照、模型都是目标,每个测试也单独算:一个模型带 not_null 和 unique 两个测试,就是 3 个目标。超出额度的单价是 0.094 美元一个。3dbt 平台用户也有额度:Starter 每月 1,000 个,Enterprise 2,000 个,都到 2027 年 3 月 31 日为止。3

它只在结果会变的时候才重建

每个节点开跑之前,dbt State 先比逻辑和数据。渲染后的 SQL 变了,就重建。SQL 没变,这个 schema 里已经有表,而且上游没有新数据,或者上次构建还在 lag_tolerance 容忍期内(默认 45 分钟),就直接跳过。本 schema 里没有、别的环境有逻辑相同且数据新鲜的版本,就克隆过来。都不满足才正常构建,没被选中的上游自动 defer。2官方示例里,一个 12 个模型的项目第二次运行,12 个全部复用,估计省下 17.77 秒。7

它发给 dbt Labs 的只有元数据:表的最后修改时间和 SQL 的哈希。服务不连你的仓库,运行在美国的一个多租户实例上。2受数据出境规则约束的团队,上线前要先过一遍合规。

三个环境共用一份状态,都以生产为基准

先说三者的关系。生产、预发、开发各跑各的,没有先后顺序;它们共用 dbt State 里同一份状态记录,默认都以生产为参照。6生产按计划把表建好;预发和开发需要上游表时,只要生产里那张表逻辑没变、数据够新,就直接读或克隆过来,不用自己从头再建一遍。2

FIG.1三个环境共用一份状态记录,都以生产为基准:预发和开发缺上游表时,从生产读取或克隆。三者之间没有先后顺序。

**生产:省的是重复构建。**定时作业每跑一次,dbt State 先查状态:SQL 没改、上游也没新数据的表直接跳过。上游一直在更新时,可以用 lag_tolerance 设容忍期,官方建议生产从 4 小时起步,下游最多每 4 小时跟着重建一次。4作业跑得越勤越划算,因为一张表一天复用多少次都只算 1 个 DATT。生产目标再设 allow_clones: false,别的环境的表就不会被克隆进来,基准不会被污染。5

**预发和 CI:省的是每个 PR 的构建量。**一个 PR 通常只改几个模型。用 state:modified+ 选择时,dbt State 拿每个节点和它在生产里的上次执行比,只建逻辑真正改过的模型和下游,没选中的上游直接读生产的表;团队习惯以预发为准,就设 defer_to_target: staging。6

**开发:省的是等待。**在自己的 schema 里改一个模型时,上游表往往还不存在。官方示例里,在全新的开发 schema 里只跑 customers:没有 dbt State 会报错,说上游表不存在;有了它,上游从生产读取,模型没改时直接从生产克隆一份。7开发环境的容忍期官方建议放宽到 7 天,4用旧一点的数据就够了。

免费额度最多值每月 94 美元

1,000 × 0.094 = 94 美元一个月,一年 1,128 美元。这是永久免费能直接省下的上限。

换算到每天,额度只有约 33 个目标,测试还要单算。按 30 天一个月和官方单价,每天复用的目标越多,超出部分越贵:

FIG.2每天复用的目标数与每月 dbt State 费用,已扣除 1,000 个免费额度。按 30 天和 0.094 美元单价计算。

免费计划用完额度不收费,但会停止复用,到下月 1 日才恢复,3中型项目的生产作业可能月中就退回全量重建。所以免费额度更适合个人开发、CI 和小项目;生产要长期用,就绑卡按量付费,或者签预付合同。1

真正省钱的是仓库计算。判断标准很简单:一个目标被复用的那一天,省下的重建费用要超过 0.094 美元。每小时一跑的大表和增量模型最划算;几秒就建完的视图和测试,复用一次也照样收 0.094 美元。dbt Labs 唯一的省钱数字来自一段客户引语:Virgin Media O2 称作业时长和仓库费用都省了 25%,没有给基线。1比较稳妥的做法是先在免费额度里跑一个月,在 Billing & Usage 页面看实际的 DATT,3再和仓库账单上省下的部分对比。

参考

  1. dbt State now available free forever, dbt Labs Blog
  2. About dbt State, dbt Docs
  3. dbt State usage, dbt Docs
  4. Setting up dbt State, dbt Docs
  5. dbt State configurations, dbt Docs
  6. Configure deferral, dbt Docs
  7. dbt State examples, dbt Docs

评论