1

我每天都将数据加载到 Snowflake 数据仓库上的数据保险库模型中。

我已将摄取脚本(javascript 程序)拆分为 3 个主要部分以用于记录目的。

  1. 将数据放入临时表
  2. 元数据部分,我将数据添加到几个集线器和链接中,其中包含每行的元数据(位置、数据条目名称……)
  3. 将主要数据持有指标及其值加载到特定的集线器和卫星中。

以下是数据文件每个部分的平均加载时间,该数据文件包含大约 2000 行,指标值约为 300k:

  1. 将数据从阶段添加到临时表需要 3 到 5 秒
  2. 将元数据添加到 9 个集线器、卫星和链路需要 19 到 25 秒
  3. 将 2000 行添加到集线器中,然后将 300k 值添加到 sat 和 link 需要 3 到 5 秒。

对于第 2 部分,无论是否需要插入,因为我使用的是合并语句,这将花费相同的时间。

我想到了很多事情,因为如果最初没有找到的价值正在增加,那么加载数千条记录需要几秒钟的时间,同时合并到几个集线器(表)中。

我可以替换与第 2 部分相关的表的所有合并语句并用一个条件替换它吗

insert all 

into table1 … where…

into table2 … where …

考虑到每个表上的 where 子句将包含一个 select 子查询以确保不会再次添加现有数据,是否可以插入条件类似于 merge 语句不匹配时的条件可以减少摄取时间?

我正在阅读这篇关于优化加载到数据保险库模型中的文章及其在 github 上的相关脚本,但仍然担心以一种有效的方式减少摄取时间。

4

1 回答 1

1

Galavan 的文章令人钦佩的是,在相同链接或分层链接的情况下,它在加载到同一个集线器时存在一些致命缺陷——也就是说,您将加载重复项。我不鼓励您使用 Multi-Table 插入来加载集线器、链接和卫星 - 要对此进行分析和测试,请访问此处:https ://patrickcuba.medium.com/data-vault-test-automation-52c0316e8e3a

这并不是说 MTI 在 DV 中没有一席之地,他们有!在绝对加载对数 PIT 结构的情况下!关于这方面的深入文章发表在这里:https ://patrickcuba.medium.com/data-vault-pit-flow-manifold-e2b68df26628

现在,特别是合并与插入对话不应出现在 Data Vault 2.0 词汇表中,因为 DV2.0 是 INSERT-ONLY。我在这里做了另一篇文章,重点是散列,但是有一个部分讨论了 Snowflake 中微分区级别发生的事情,这应该会阻止您使用 MERGE INTO,请访问:https ://patrickcuba.medium.com/data- Vault-2-0-on-snowflake-5b25bb50ed9e

鉴于您正在构建自己的 DV 自动化工具,这两个博客也值得一读:

于 2021-11-12T23:42:13.353 回答