【问题标题】:How to solve a real time dwh delete process?如何解决实时dwh删除过程?
【发布时间】:2017-03-05 10:13:16
【问题描述】:

我正在尝试创建一个近乎实时的 dwh。我的第一次尝试是每 15 分钟从我的 DWH 将一个表加载到我的应用程序中。

我想避免近乎实时的 DWH 可能面临的所有问题。其中一个问题是查询一个显示多选 html 标记值的空表。

为了解决这个问题,我想到了以下解决方案,但我不知道是否存在解决此类问题的标准。

我创建一个这样的表来保存多选的可能值:

CREATE TABLE providers (
    provider_id INT PRIMARY KEY,
    provider_name VARCHAR(20) NOT NULL,
    delete_flag INT NOT NULL
)

在插入之前,我像这样更新表格:

UPDATE providers set my_flag=1

我用这样的 ETL 过程插入行:

INSERT INTO providers (provider_name, delete_flag) VALUES ('Provider1',0)

从我的应用程序中,我像这样查询表格:

SELECT DISTINCT provider_name FROM providers

虽然应用程序仍在运行并选择所有提供程序而不重复(源可以删除、添加或更新一个提供程序,所以我始终必须更新源代码)并且不会显示错误,因为表是空的,我可以运行它在插入语句之后的语句:

DELETE FROM providers WHERE delete_flag=1

我认为这对于小表或更改很少的大表来说是一个很好的解决方案,但是当表很大时会发生什么?有解决这类问题的标准吗?

我们不能冒用户可用性的风险,因为我们正在更新数据。

【问题讨论】:

    标签: mysql database real-time etl data-warehouse


    【解决方案1】:

    有两种方法可以在不采用会中断查询的维护窗口的情况下公开维度的批量更改。

    第一个使用事务概念很简单,但对大数据表现不佳。

    DELETE the replaced dimension records
    INSERT the new or changed dimension records
    COMMIT;
    

    请注意,您不需要逻辑 DELETE 标志,因为更改仅在 COMMIT 之后可见 - 因此表永远不会为空。

    如前所述,如果您的维度很大且更改很多,则此方法不适合。在这种情况下,您可以使用 MySQL 5.6 中的 EXCHANGE PARTITION 功能

    您定义了一个与维度表具有相同结构的临时表,该表仅使用一个包含所有数据的分区进行分区。

    CREATE TABLE dim_tmp (
        id INT NOT NULL,
        col1 VARCHAR(30),
        col2 VARCHAR(30)
    )
        PARTITION BY RANGE (id) (
            PARTITION pp VALUES LESS THAN (MAXVALUE)
    );
    

    使用完整的新维度定义填充表,并使用您的维度表切换此临时表。

     ALTER TABLE dim_tmp EXCHANGE PARTITION pp WITH TABLE dim;
    

    在此语句之后,临时表中的数据将存储(发布)在您的维度表(新定义)中,维度的旧状态将存储在临时表中。

    请查看上面的文档链接了解此功能的限制条件。

    免责声明:我在 Oracle DB 中使用此功能,但在 MySQL 中没有使用此功能的经验。

    【讨论】:

    • 您的第一个解决方案很好。但在 SQL Server 中,需要激活提交语句,默认情况下它会执行提交。第二个解决方案我理解这个概念,但是这里的分区的功能是什么?
    • 分区是出于技术原因使用的。您可以根据表切换分区 - 而不是带有表的表。请检查doku。
    • 感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2021-12-20
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多