我每天都将数据加载到 Snowflake 数据仓库上的数据保险库模型中。
我已将摄取脚本(javascript 程序)拆分为 3 个主要部分以用于记录目的。
- 将数据放入临时表
- 元数据部分,我将数据添加到几个集线器和链接中,其中包含每行的元数据(位置、数据条目名称……)
- 将主要数据持有指标及其值加载到特定的集线器和卫星中。
以下是数据文件每个部分的平均加载时间,该数据文件包含大约 2000 行,指标值约为 300k:
- 将数据从阶段添加到临时表需要 3 到 5 秒
- 将元数据添加到 9 个集线器、卫星和链路需要 19 到 25 秒
- 将 2000 行添加到集线器中,然后将 300k 值添加到 sat 和 link 需要 3 到 5 秒。
对于第 2 部分,无论是否需要插入,因为我使用的是合并语句,这将花费相同的时间。
我想到了很多事情,因为如果最初没有找到的价值正在增加,那么加载数千条记录需要几秒钟的时间,同时合并到几个集线器(表)中。
我可以替换与第 2 部分相关的表的所有合并语句并用一个条件替换它吗
insert all
into table1 … where…
into table2 … where …
考虑到每个表上的 where 子句将包含一个 select 子查询以确保不会再次添加现有数据,是否可以插入条件类似于 merge 语句不匹配时的条件可以减少摄取时间?
我正在阅读这篇关于优化加载到数据保险库模型中的文章及其在 github 上的相关脚本,但仍然担心以一种有效的方式减少摄取时间。