我正在使用BigQuery进行数据仓库项目。我们正在加载从各种大型机系统导出的每日文件。大多数表都有唯一的键,可用于创建2型历史记录,但有些表,例如分类帐/位置表可以有重复的行。这些文件每天包含从源系统提取的完整数据。
[当前,我们可以在不知道主键的情况下为大多数表保留2型历史记录,只要负载中的所有行都是唯一的,但是对于不是这种情况的表,我们会遇到挑战。
项目上的一个人建议处理它的方法是“比较重复项”,这意味着如果DWH表具有5个相同的行,而临时表具有6个相同的行,那么我们只需再插入一个,如果反之,我们只需关闭DWH表中的一条记录(将结束日期设置为现在)即可。这可以通过向数据集添加和添加“子行”键来实现,如下所示:
Row_number() over(partition by “all data columns” order by SystemTime) as data_row_nr
我试图找出这是否是一种好习惯,但是没有任何运气。这件事对我来说似乎是错误的,而且我看不出这样做会导致无法预料的后果。
有人能告诉我最好的方法是每天处理全部分类账数据时,我们要在DWH中保持某种历史记录吗?
不,我认为基于所有列加上重复行的索引来引入人工主键不是一个好主意。
您将解决技术问题,但我怀疑会不会有一定的商业价值。首先,您应该与众不同–通过主键获得的表是dimensions,您可以识别更改并生成历史记录。
但是表没有PK最有可能是事实表(即交易记录),它们通常不是满载,而是根据某些DELTA准则加载的。
无论如何您将永远无法识别更新在这些记录中,只有可能的更改是插入(由于数据仓库保留了源系统的较长历史记录,因此删除通常无关紧要)。
所以我的待办事项清单
检查dup是故意还是非法的
尝试找到用于加载事实表的增量标准
如果一切都失败了,请使用重复数的单个属性作为所有列的主键,并建立历史记录。