清理 Teradata 时态表中的错误 Delete/Inserts
Cleaning up bad Delete/Inserts in Teradata Temporal Tables
希望找到一种方法来清理一段时间内 table 的一些数据,而这些年来 Deletes/Inserts 一直都在发生坏事。当周期值 overlapped/met 时,我能够使用 NORMALIZE,但是,我现在 运行 遇到周期不 overlap/meet 的问题。我想合并期间。
之前:
之后:
我最初的计划是采用 min(begin(eff_vt_dttm)) 和 max(end(eff_vt_dttm)) 并在按所有列分组后创建一个新的时间段。问题是行值重复的边缘情况,例如第 1 行和第 2 行应该合并,但不希望第 5 行和第 6 行与第 1 行和第 2 行合并。第 1 行和第 2 行应该合并到它们自己的行,第 5 行和 6 也应该合并到他们自己的行中。我正在考虑创建分组,以便我可以占据该组的 min/max,但遇到了困难。
分组思路:
想知道是否有人知道解决这个问题的好方法。
谢谢!
由于我对您的评论中提到的原因 post,这是未经测试的。
它使用称为间隙和孤岛的概念来识别值保持不变的连续记录。这些构成了最终图像中的你'groups'。
WITH
sorted AS
(
SELECT
your_data.*,
ROW_NUMBER() OVER (PARTITION BY id
ORDER BY BEGIN(eff_vt_dttm)
)
AS seq_num_id,
ROW_NUMBER() OVER (PARTITION BY id, col1, col2
ORDER BY BEGIN(eff_vt_dttm)
)
AS seq_num_id_col1_col2
FROM
your_data
)
SELECT
s.id,
s.col1,
s.col2,
PERIOD(
MIN(begin(s.eff_vt_dttm)),
MAX(end(s.eff_vt_dttm))
)
AS eff_vt_dttm
FROM
sorted AS s
GROUP BY
s.id,
s.col1,
s.col2,
s.seq_num_id - s.seq_num_id_col1_col2
ORDER BY
s.id,
MIN(begin(s.eff_vt_dttm))
希望找到一种方法来清理一段时间内 table 的一些数据,而这些年来 Deletes/Inserts 一直都在发生坏事。当周期值 overlapped/met 时,我能够使用 NORMALIZE,但是,我现在 运行 遇到周期不 overlap/meet 的问题。我想合并期间。
之前:
之后:
我最初的计划是采用 min(begin(eff_vt_dttm)) 和 max(end(eff_vt_dttm)) 并在按所有列分组后创建一个新的时间段。问题是行值重复的边缘情况,例如第 1 行和第 2 行应该合并,但不希望第 5 行和第 6 行与第 1 行和第 2 行合并。第 1 行和第 2 行应该合并到它们自己的行,第 5 行和 6 也应该合并到他们自己的行中。我正在考虑创建分组,以便我可以占据该组的 min/max,但遇到了困难。
分组思路:
想知道是否有人知道解决这个问题的好方法。
谢谢!
由于我对您的评论中提到的原因 post,这是未经测试的。
它使用称为间隙和孤岛的概念来识别值保持不变的连续记录。这些构成了最终图像中的你'groups'。
WITH
sorted AS
(
SELECT
your_data.*,
ROW_NUMBER() OVER (PARTITION BY id
ORDER BY BEGIN(eff_vt_dttm)
)
AS seq_num_id,
ROW_NUMBER() OVER (PARTITION BY id, col1, col2
ORDER BY BEGIN(eff_vt_dttm)
)
AS seq_num_id_col1_col2
FROM
your_data
)
SELECT
s.id,
s.col1,
s.col2,
PERIOD(
MIN(begin(s.eff_vt_dttm)),
MAX(end(s.eff_vt_dttm))
)
AS eff_vt_dttm
FROM
sorted AS s
GROUP BY
s.id,
s.col1,
s.col2,
s.seq_num_id - s.seq_num_id_col1_col2
ORDER BY
s.id,
MIN(begin(s.eff_vt_dttm))