Foundry Magritte如何追加提取处理数据源中已删除的行?

问题描述

如果我将Magritte提取设置为追加,它将检测源数据中是否删除了行?还会删除摄取的数据集中的行吗?

解决方法

关于是否检测到删除的第一个问题,这将取决于您要从中提取的数据库实现(对于该答案,我假设这是JDBC)。如果此内容显示为修改内容,因此显示为新行,则是的,您的删除内容将显示。

一开始看起来像是这样:

.Grid {
    border-width: 0;
    border-style: none;
    background-color: aqua;
    color: BlanchedAlmond;
    width: 200px;
}

.GridA {
    border-width: 0;
    border-style:none;
    background-color: DarkBlue;
    color: BlanchedAlmond;
    width: 200px;
}

随后进行了一些更新(在后续运行中,在| primary_key | val | update_type | update_ts | |-------------|-----|-------------|-----------| | key_1 | 1 | CREATE | 0 | | key_2 | 2 | CREATE | 0 | | key_3 | 3 | CREATE | 0 | 上进行了增量操作:

update_ts

现在您的数据库将必须显式标记任何| primary_key | val | update_type | update_ts | |-------------|-----|-------------|-----------| | key_1 | 1 | UPDATE | 1 | | key_2 | 2 | UPDATE | 1 | 并增加update_ts才能将其引入:

DELETE

此后,您将能够检测到已删除的记录并进行相应的调整。现在,完整的物化表视图将如下所示:

| primary_key | val | update_type | update_ts |
|-------------|-----|-------------|-----------|
| key_1       | 1   | DELETE      | 2         |

如果您在| primary_key | val | update_type | update_ts | |-------------|-----|-------------|-----------| | key_1 | 1 | CREATE | 0 | | key_2 | 2 | CREATE | 0 | | key_3 | 3 | CREATE | 0 | | key_1 | 1 | UPDATE | 1 | | key_2 | 2 | UPDATE | 1 | | key_1 | 1 | DELETE | 2 | 提取中以增量方式运行,则这些行将自动从数据集中删除; 您将必须明确编写逻辑来检测这些已删除的记录,并将其从输出raw步骤中删除。如果找到了这些删除,则必须clean输出将它们删除(除非您正在执行较低级别的文件操作,也许可以删除基础文件)。

值得注意的是,您将希望尽可能晚地实现SNAPSHOT(假设您的中间逻辑允许这样做),因为这将需要快照,并且会破坏总体管道性能。

如果您不使用JDBC,那么@Kellen的答案将适用。

,

如果这是基于文件的获取(与JDBC相反),则magritte提取将对不在行上的文件进行操作。如果将您用于提取的事务类型设置为UPDATE,并且您对该文件进行了更改(包括删除行),那么在进行提取时,新文件将完全替换该数据集中的现有文件,因此对该文件所做的任何更改都会反映在数据集中。

另外两个注意事项:

  1. 如果您已将排除文件已同步过滤器,则可能要启用上次修改日期和/或文件大小选项,否则将不会提取修改后的文件。 exclude files already synced
  2. 如果您的事务类型设置为APPEND而不是UPDATE,则提取将失败,因为APPEND不允许更改现有文件。