Snowflake MigrationClickHouse Workshops
规划练习表

练习表 4:迁移波次方案

把十个 NYC 出租车对象排入迁移波次,并为每一个评定复杂度,每个答案都有即时反馈。

预计耗时: 15–20 分钟 参考资料: 执行顺序见 模块 03,provision 与迁移 → 模块 04,重建 dbt 管道 → 模块 05,基准测试与切换

概念

数据库对象之间存在依赖。一个查询 fact_trips 的视图不可能在 fact_trips 存在之前创建。一个从 trips_raw 读取的物化视图不可能在 trips_raw 有数据之前完成填充。顺序搞错会导致建表 失败、结果为空,或者出现难以诊断的不完整数据。

解决办法:波次规划。 把每个对象编入带编号的波次,每个 波次只包含依赖已被前面波次满足的对象。

复杂度评级有助于安排迁移投入的优先级。B 与 C 之间的界线在于 一个语句是必须重构,还是只需重新写类型:

  • A 级:简单:标准表或直通视图,没有特殊逻辑, 类型映射直截了当
  • B 级:中等:有一个需要学习和测试的 ClickHouse 专有构造,但 翻译本身只是一次替换,一个 ClickHouse 引擎加增量配置、一个 CREATE DICTIONARY、可刷新 MV 的 REFRESH EVERY,或者用一个 JSONExtract* 路径 顶替一次 VARIANT 读取
  • C 级:复杂:语句必须重建,而不只是重新写类型(QUALIFY 包进子查询、MERGE INTO 换成增量策略),并且这次 重写还必须与引擎选择以及下游各处的 FINAL 放置位置保持 一致;要仔细测试
  • D 级:需要重新设计:Snowflake 专有特性,没有直接等价物 (Streams → 生产者切换到 ClickHouse,Tasks → 可刷新 MV 或定时 dbt 运行)

下面的练习 3 要求你用压缩后的三档标准来评级,而不是上面的四个 字母,Low(A 级)、Medium(B 级)、High(C 级或 D 级),因为 对排期投入最重要的区分是简单 / 需要测试 / 需要重新设计,而不是四分法。每个答案的解释都会指明对应 A–D 中的哪一档, 所以你依然可以映射回字母等级。

练习 1:依赖 DAG

对下面每个对象,选出它依赖什么。十个中有三个是静态参考 数据,完全没有依赖,那是一个真实答案,不是留待以后填补的空缺。

练习 2:迁移波次分配

波次 0 和 1 已作为上下文填好。对波次 2 到 4,选出属于该波次的 对象,然后回答其中实际发生了什么。

练习 3:复杂度评级

为每个对象评级,然后回答表格下方关于它主要挑战的问题。

反思问题

最后两个问题涉及答案参考中风险登记表的三个条目, 在 fact_trips(C 级)和 agg_hourly_zone_trips 落地之后对它们进行验证,以及 验证替换 TRIPS_CDC_STREAM 和 CDC_CONSUME_TASK 的生产者切换 (D 级)。这份登记表并不就等于 C 级/D 级的集合:agg_hourly_zone_trips 评为 Medium,但它的滚动重算窗口是这条管道中最容易在细微处 出错的东西。

Loading worksheet...

转录到 migration-plan.md

把你的波次方案和复杂度评级抄到 migration-plan.md 的第 6 节,并 勾选:

- [ ] Migration wave plan: completed

本页内容

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

ZH