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

dat*_*ard 5 palantir-foundry foundry-data-connection

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

van*_*ser 1

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

一开始看起来像下面这样:

| primary_key | val | update_type | update_ts |
|-------------|-----|-------------|-----------|
| key_1       | 1   | CREATE      | 0         |
| key_2       | 2   | CREATE      | 0         |
| key_3       | 3   | CREATE      | 0         |
Run Code Online (Sandbox Code Playgroud)

接下来是一些更新(在后续运行中,增量更新update_ts

| primary_key | val | update_type | update_ts |
|-------------|-----|-------------|-----------|
| key_1       | 1   | UPDATE      | 1         |
| key_2       | 2   | UPDATE      | 1         |
Run Code Online (Sandbox Code Playgroud)

现在,您的数据库必须显式标记任何DELETE增加 update_ts 才能引入:

| primary_key | val | update_type | update_ts |
|-------------|-----|-------------|-----------|
| key_1       | 1   | DELETE      | 2         |
Run Code Online (Sandbox Code Playgroud)

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

| 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         |
Run Code Online (Sandbox Code Playgroud)

如果您在摄取中增量运行raw,这些行将不会自动从数据集中删除; 您必须显式编写逻辑来检测这些已删除的记录并将其从输出clean步骤中删除。如果找到这些删除,您将必须SNAPSHOT输出删除它们(除非您正在执行较低级别的文件操作,您可能可以删除底层文件)。

值得注意的是,您需要DELETES尽可能晚地实现(假设您的中间逻辑允许),因为这将需要快照并会降低您的整体管道性能。

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