Общий шаблон использования для реализации SCD2?

#sql #data-warehouse

#sql #хранилище данных

Вопрос:

Мы написали некоторый пользовательский код на Python (работающий на Composer), который пытается синхронизировать данные из нашей встроенной базы данных в Google BigQuery. Первый шаг ищет в исходной таблице «change_date больше или равно тому, что уже есть в BQ», захватывает эти обновленные строки и добавляет их в промежуточную таблицу вместе с полем «метка времени сбора данных». Давайте предположим, что исходные данные имеют уникальный первичный ключ. Промежуточная таблица после нескольких запусков будет иметь много строк для каждой точки данных первичного ключа: по крайней мере, по одной каждый раз, когда мы наблюдали изменение, и, возможно, несколько строк-дублей (учитывая логику захвата «больше или равно»).

Мой вопрос: существует ли общий шаблон, используемый для перевода такой промежуточной таблицы только для добавления в конечную таблицу SCD2 с valid_from, valid_to и т. Д.? Требования:

  1. Этот шаблон должен либо воссоздать всю итоговую таблицу (из промежуточной таблицы), если она не существует, ЛИБО,
  2. если там уже есть данные, следует реализовать SCD2 для измененных строк (измените valid_to на change_date для существующей записи, добавьте новую запись с valid_to = null).
  3. Он также должен обрабатывать случай, когда, возможно, было много добавлений первого шага в промежуточную таблицу между последующими записями в конечную таблицу. (т. Е. В одной строке может быть зарегистрировано несколько изменений в промежуточной таблице).

Я знаю об этом шаблоне: https://medium.com/happiestneurons/slowly-changing-dimension-type-2-scd2-in-big-query-95330ce31625

Это потрясающе, однако он не соответствует требованиям 1 и 3.

Я пробиваюсь через это и думаю, что я это понимаю. Но это должен быть довольно распространенный шаблон хранилища данных, и поэтому я подумал, что хотел бы спросить, есть ли простой справочный или общепринятый способ сделать это.

Комментарии:

1. Хотя структуры данных типа 2 могут быть полезны, вы можете просто захотеть сохранять снимок каждый день и использовать встроенное разделение.

2. Спасибо за ваш ответ, Гордон. Хорошая идея для большинства случаев. Однако снимки заставляют меня нервничать по нескольким причинам: 1) возможность сбоя просто означает, что мы пропускаем целый день, что плохо для аналитиков, которые хотят использовать данные позже; 2) несмотря на то, что хранилище дешевое, очень большие и медленно меняющиеся размеры будут занимать больше места, чем необходимо.