gpt4 book ai didi

database - Data Vault 2 - 哈希差异和重复数据更改

转载 作者:行者123 更新时间:2023-12-04 15:00:26 26 4
gpt4 key购买 nike

当某些数据改回以前的值时,我在检索卫星表中的最新值时遇到问题。
数据库是雪花。
根据 Data Vault 2.0,我目前正在使用 hash diff 函数来评估是否在卫星表中插入新记录,如下所示:

INSERT ALL
WHEN (SELECT COUNT(*) FROM SAT_ACCOUNT_DETAILS AD WHERE AD.MD5_HUB_ACCOUNT = MD5_Account AND AD.HASH_DIFF = AccHashDiff) = 0
THEN
INTO SAT_ACCOUNT_DETAILS (MD5_HUB_ACCOUNT
, HASH_DIFF
, ACCOUNT_CODE
, DESCRIPTION
, SOME_DETAIL
, LDTS)
VALUES (MD5_AE_Account
, AccHashDiff
, AccountCode
, Description
, SomeDetail
, LoadDTS)
SELECT DISTINCT
MD5(AccountId) As MD5_Account
, MD5(UPPER(COALESCE(TO_VARCHAR(AccountCode), '')
|| '^' || COALESCE(TO_VARCHAR(Description), '')
|| '^' || COALESCE(TO_VARCHAR(SomeDetail), '')
)) AS AccHashDiff
, AccountCode
, Description
, SomeDetail
, LoadDTS
FROM source_table;
第一次,添加了 AccountCode = '100000' 和 SomeDetail = 'ABC' 的新记录:


MD5_HUB_ACCOUNT
HASH_DIFF
帐户_代码
描述
一些细节
LDTS


c81e72...
8d9d43...
100000
一个帐户
美国广播公司
2021-04-08 10:00


一小时后,更新将 SomeDetail 的值更改为“DEF”,这是结果表:


MD5_HUB_ACCOUNT
HASH_DIFF
帐户_代码
描述
一些细节
LDTS


c81e72...
8d9d43...
100000
一个帐户
美国广播公司
2021-04-08 10:00

c81e72...
a458b2...
100000
一个帐户
防御工事
2021-04-08 11:00


第三次更新将 SomeDetail 的值设置回“ABC”,但记录为 未插入 在卫星表中,因为哈希差异的值与第一个插入的记录相同(即 8d9d43...)。
如果我查询卫星表中的最新记录,LDTS 列会告诉我它是带有“DEF”的记录,这不是所需的结果。
相反,我应该有一个 SomeDetail = 'ABC' 和 LDTS = '2021-04-08 12:00' 的记录。
对此的正确方法是什么?如果我将 LoadDTS 添加到哈希差异中,每次推送更新时都会创建一个新记录,这也不是预期的结果。

最佳答案

正如您(以及标准)所提到的,您需要与最后一个有效记录进行比较。
我不是雪花专家,但它可能看起来像这样:

INSERT ALL
WHEN (SELECT COUNT(*) FROM SAT_ACCOUNT_DETAILS AD WHERE AD.MD5_HUB_ACCOUNT = MD5_Account AND AD.HASH_DIFF = AccHashDiff AND AD.LDTS = (SELECT MAX(LDTS) FROM SAT_ACCOUNT_DETAILS MAD WHERE MAD.MD5_HUB_ACCOUNT = AD.MD5_HUB_ACCOUNT)) = 0
THEN ....
通过将“AD.LDTS = (SELECT MAX(LDTS) FROM.....”添加到查询中,您可以确保针对最新数据而不是历史数据进行测试

关于database - Data Vault 2 - 哈希差异和重复数据更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67024465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com