0

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

我们目前能够在不知道主键的情况下为大多数表维护类型 2 历史记录,只要加载中的所有行都是唯一的,但是对于不是这种情况的表,我们会遇到挑战。

项目中的一个人建议,处理的方式是“比较重复”,意思是如果DWH表有5个相同的行,而staging表有6个相同的行,那么我们就再插入一个,如果是反过来,我们只需关闭 DWH 表中的一条记录(通过将结束日期设置为现在)。这可以通过向数据集添加额外的“子行”键来实现,如下所示:

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

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

任何人都可以告诉我在每天处理大量分类账数据时最好的方法是什么,我们希望在 DWH 中维护某种历史记录?

4

1 回答 1

1

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

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

但是没有 PK的表很可能是事实表(即事务记录),它们通常不是完全加载的,而是根据一些 DELTA 标准加载的。

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

所以我的待办事项清单

  • 检查 dup 是有意的还是非法的

  • 尝试找到一个增量标准来加载事实表

  • 如果一切都失败了,则将所有列的主键设为具有重复数的单个属性并构建历史记录。

于 2020-02-20T17:41:29.497 回答