gpt4 book ai didi

mysql - 迁移数据时如何检测已删除的行

转载 作者:行者123 更新时间:2023-11-29 21:54:35 25 4
gpt4 key购买 nike

我有一个主数据库,并定期将数据从该数据库移至第二个数据仓库。

我不想每次都迁移整个表,而是只想迁移自上次运行进程以来已更改的行。使用 WHERE 子句就可以很容易地做到这一点。但是,假设主数据库中的某些行已被删除。我没有一个好的方法来检测哪些行不再存在,以便我也可以在数据仓库上删除它们。有没有好的方法可以做到这一点? (而不是每次重新加载整个表,因为表很大)

最佳答案

可以通过以下步骤完成,假设在此示例中我使用客户表:

CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
LAST_UPDATED DATETIME,
PRIMARY KEY (ID)
);
  1. 创建 CDC:

    CREATE TABLE CUSTOMERS_CDC( 
    ID INT NOT NULL,
    LAST_UPDATED DATETIME,
    PRIMARY KEY (ID)
    );
  2. 在源表上触发删除事件,如下所示:

    CREATE TRIGGER TRG_CUSTOMERS_DEL 
    ON CUSTOMERS
    FOR DELETE
    AS
    INSERT INTO CUSTOMERS_CDC (ID, LAST_UPDATED)
    SELECT ID, getdate()
    FROM DELETED
  3. 在您查询更改源的 ETL 过程中,通过 UNION 添加已删除的记录信息或创建单独的过程,如下所示:

    SELECT ID, NAME, AGE, ADDRESS, LAST_UPDATED, ‘I/U’ STATUS 
    FROM CUSTOMERS
    WHERE LAST_UPDATED > @lastpulldate
    UNION
    SELECT ID, null, null, null, LAST_UPDATED, ‘D’ STATUS
    FROM CUSTOMERS_CDC
    WHERE LAST_UPDATED > @lastpulldate

关于mysql - 迁移数据时如何检测已删除的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287936/

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