我应该将类型 2 历史应用于具有重复键的表吗?

Should I apply type 2 history to tables with duplicate keys?

我正在使用 BigQuery 进行数据仓库项目。我们正在加载从各种大型机系统导出的日常文件。大多数 tables 都有唯一的键,我们可以用它来创建类型 2 历史记录,但有些 tables,例如a ledger/positions table,可以有重复的行。这些文件包含每天从源系统提取的完整数据。

我们目前能够在不知道主键的情况下为大多数 table 维护 2 类历史记录,只要加载中的所有行都是唯一的,但我们在 tables 但事实并非如此。

项目中的一个人建议处理它的方式是 "compare duplicates",意思是如果 DWH table 有 5 个相同的行并且暂存 tables 有6 个相同的行,然后我们再插入一个,如果相反,我们只关闭 DWH table 中的一个记录(通过将结束日期设置为现在)。这可以通过向数据集添加额外的 "sub row" 键来实现,如下所示:

Row_number() over(partition by “all data columns” order by SystemTime) as data_row_nr

我试图找出这是否是一个好的做法,但没有任何运气。我觉得有些地方不对劲,我看不出这样做会产生什么不可预见的后果。

谁能告诉我每天处理大量分类帐数据的最佳方法是什么,我们希望在 DWH 中保留某种历史记录?

不,我认为引入基于所有列加上重复行的索引的人工主键不是一个好主意。

你会解决技术问题,但我怀疑是否会有一些商业价值。 首先,您应该区分 - 使用主键获得的 table 是 维度 并且您可以识别更改和构建历史记录。

但没有 PK 的 table 很可能是通常未 满载的事实 table(即交易记录) 但根据某些 DELTA 标准加载。

无论如何您将永远无法识别这些记录中的更新,唯一可能的更改是插入(删除通常不相关,因为数据仓库保留比源系统更长的历史记录).

所以我的待办事项列表

  • 检查复制是否有意或非法

  • 尝试找到加载事实的增量标准tables

  • 如果一切都失败了,使所有列的主键具有重复次数的单个属性并构建历史。