Как Foundry Magritte append ingestion обрабатывает удаленные строки в источнике данных?

#palantir-foundry #foundry-data-connection

#palantir-foundry #foundry-data-connection

Вопрос:

Если у меня есть Magritte ingestion, для которого установлено значение append, будет ли он определять, удалены ли строки в исходных данных? Будет ли это также удалять строки из введенного набора данных?

Ответ №1:

Что касается вашего первого вопроса о том, обнаружены ли удаления, это будет зависеть от реализации базы данных, из которой вы извлекаете (я предполагаю, что это JDBC для этого ответа). Если это отображается как модификация и, следовательно, новая строка, то да, ваши удаления будут отображаться.

Сначала это будет выглядеть примерно так:

 | 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         |
  

Теперь ваша база данных должна будет явно пометить любые DELETE строки и увеличить update_ts, чтобы это было введено:

 | 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 вывести их удаление (если вы не выполняете низкоуровневые манипуляции с файлами, где, возможно, вы могли бы удалить базовый файл).

Стоит отметить, что вы захотите реализовать DELETES как можно позже (при условии, что ваша промежуточная логика позволяет это), поскольку для этого потребуется моментальный снимок и снизит общую производительность конвейера.

Если вы не имеете дело с JDBC, тогда будет применяться ответ @Kellen.

Ответ №2:

Если это инициализация на основе файлов (в отличие от JDBC), magritte ingestion работает с файлами, а не со строками. Если для вашего типа транзакции для приема установлено значение ОБНОВИТЬ, и вы вносите изменения в файл, включая удаление строк, то при выполнении приема новый файл полностью заменит существующий файл в этом наборе данных, поэтому любые изменения, внесенные в файл, будут отражены в наборе данных.

Два дополнительных примечания:

  1. Если у вас есть фильтр исключения уже синхронизированных файлов, вы, вероятно, захотите включить параметры даты последнего изменения и / или размера файла, иначе измененный файл не будет принят. исключить уже синхронизированные файлы
  2. Если для вашего типа транзакции установлено значение APPEND, а не UPDATE, то прием завершится неудачно, поскольку APPEND не разрешает вносить изменения в существующие файлы.