Исключения из правила неизменности озера данных - PullRequest
1 голос
/ 17 марта 2020

Озеро данных должно быть неизменным :

Важно, чтобы все данные, помещенные в озеро, имели четкое происхождение по месту и времени. Каждый элемент данных должен иметь четкое представление о том, из какой системы он поступил и когда были получены данные. Озеро данных, таким образом, содержит историческую запись. Это может быть связано с подачей доменных событий в озеро, что естественным образом сочетается с системами источников событий. Но это также может происходить от систем, выполняющих регулярный сброс текущего состояния в озеро - подход, который ценен, когда исходная система не имеет каких-либо временных возможностей, но вам нужен временной анализ ее данных. Следствием этого является то, что данные, помещаемые в озеро, являются неизменными, наблюдение, которое однажды заявлено, не может быть удалено (хотя оно может быть опровергнуто позже), следует также ожидать ContradictoryObservations.

Есть ли какие-либо исключения из правила, где может считаться хорошей практикой перезапись данных в озере данных? Полагаю, нет, но некоторые товарищи по команде имеют другое понимание.

Я думаю, что происхождение и прослеживаемость данных необходимы в случае кумулятивного алгоритма, чтобы иметь возможность воспроизвести конечное состояние. Что, если конечное состояние не зависит от предыдущих результатов? Прав ли кто-то, если он говорит, что неизменность озера данных (источник событий) в озере данных необходима только для кумулятивных алгоритмов?

Например, у вас есть ежедневная загрузка таблиц A и B при полной нагрузке, впоследствии Расчет таблицы C. Если пользователь интересуется только последним результатом C, есть ли причины сохранять историю (получение событий на основе разбиения даты) для A, B и C?

Еще одной проблемой может быть соответствие ACID - возможно, ваш файл поврежден или частично записан. Но предположим, что мы обсуждаем случай, когда последние состояния A и B можно легко восстановить из исходных систем.

1 Ответ

1 голос
/ 25 марта 2020

Существуют ли исключения из правила, когда рекомендуется перезаписывать данные в озере данных хорошей практикой?

Хорошей практикой не является перезапись данных в озере данных. В случае, если какое-либо событие было сгенерировано с ошибкой или ошибкой. Новые события, которые компенсируют предыдущее, должны быть произведены. Таким образом, Datalake записывает всю историю событий, включая компенсационные события и возможные повторные обработки.

Я думаю, что происхождение и прослеживаемость данных необходимы в случае кумулятивного алгоритма, чтобы иметь возможность воспроизвести конечное состояние , Что, если конечное состояние не зависит от предыдущих результатов? Является ли кто-то прав, если он говорит, что неизменность озера данных (источник событий) в озере данных необходима только для кумулятивных алгоритмов?

DataLake является конечной судьбой для всех соответствующих событий. Не все события должны быть записаны в озере данных. Обычно мы различаем guish между операционными / коммуникационными и деловыми событиями. Бизнес-события, записанные в DataLake, можно использовать для повторной обработки или в новых функциях, которые зависят от истории события. Отдельные события, которые не зависят от истории события, также могут быть созданы и добавлены в историю. Следовательно, мы можем сделать вывод, что конечное состояние не нарушает принцип неизменности. Для множества неизменяемых во времени неизменных событий мы всегда можем получить конечное состояние. Таким образом, ответ не только для кумулятивных алгоритмов.

Например, у вас есть ежедневная загрузка таблиц A и B при полной нагрузке, а затем вычисление таблицы C. Если пользователь интересуется только последним результатом C, есть ли причины сохранять историю (получение событий на основе разделения дат) для A, B и C?

Начальное событие для истории событий не может быть воспроизведено. Только после первого события мы можем думать о конечном состоянии. В этом конкретном случае кортежи и совокупности A и B не должны рассматриваться как события. Но функция расчета ввода. Ввод функции расчета должен быть записан в озеро данных как бизнес-событие. Событие X (ввод вычисления) в конце создает событие Y. Если событие X не записано в истории события, Y следует считать начальным событием.

...