- [P20260217-223023] 2026-02-17 22:30:23 +0800
  - summary: 问题：- 维表都有SCD2吧？相应的，事实表都没有吧？- 水位线作用是区分新数据和老数据么？新数据直接写入，老数据进行对比？- 4.4 写入策略矩阵 dwd.fact_upsert 配置ODS 有 content_hash？ODS都有HAS…
  - prompt:
```text
问题：- 维表都有SCD2吧？相应的，事实表都没有吧？- 水位线作用是区分新数据和老数据么？新数据直接写入，老数据进行对比？- 4.4 写入策略矩阵 dwd.fact_upsert 配置ODS 有 content_hash？ODS都有HASH吧？- 缺失主键回补（_insert_missing_by_pk），这个章节中，假设的情况可能发生么？什么情况下发生？给我举例说明。我的以下想法是否合理？以及是否可以优化性能：- 既然上游每条ODS数据都有ID，hash，和fetched_at。那么，DWD可不可以也增加一个HASH(并建设好相应索引等事务)，ODS to DWD时，不用逐一对比，只对比fetched_at最晚的ID，对应的HASH即可知道数据是否被修改了。- 更新逻辑：知道数据缺失或修改后：SCD2做数据新增，并修改SCD2相关信息。而事实表直接修改所有字段即可。我认为ODS已经存储了快照，DWD层的事实数据，只保证最新信息即可。- ODS应该建立了索引，现在ODS to DWD时，通过索引了么？
```
