Потоки в Snowflake: захват всех изменений в строке, а не только чистых изменений до настоящего времени? - PullRequest
0 голосов
/ 18 октября 2019

(отправка от имени пользователя Snowflake - в надежде найти решение для ускорения разрешения)


Мы исследуем использование потоков для достижения медленно меняющегося измерения.

Следующие статьи были полезны, но мы ищем способ создать более полный захват изменений?

  1. https://www.snowflake.com/blog/building-a-type-2-slowly-changing-dimension-in-snowflake-using-streams-and-tasks-part-1/
  2. https://community.snowflake.com/s/article/Building-a-Type-2-Slowly-Changing-Dimension-in-Snowflake-Using-Streams-and-Tasks-Part-2

Рассмотрим этот пример:

1) Insert into MyTable row 1

2) Select * from StreamOfMyTable <====== Возвращаетвставка, как и ожидалось </p>

3) Update MyTable where Row = 1

4) Select * from StreamOfMyTable

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

На шаге 4 мы хотели бы видеть в потоке обе исходные вставки вшаг 1 и обновление на шаге 3. Это позволяет нам создать более полный SCD типа 2, а не просто чистое изменение в то время, когда мыпотреблять поток с помощью операции DML.

Мы видели, как с помощью путешествия во времени мы могли бы создать новый StreamOfMyTableAtSpecificPointInTime, используя фразу "before (Statement => 'my query guid')". Но это кажется крайним, чтобы кодировать со всеми нашими таблицами. Есть ли более естественный способ захвата ВСЕХ изменений?

ПРИМЕЧАНИЕ:
Был задан вопрос "Зачем вам нужны предыдущие значениястроки для построения типа SCD 2. Вы должны просто иметь возможность слиться с вашим окончательным измерением на основе некоторого идентификатора и обновить предыдущую запись, чтобы «закрыть ее», верно? Предыдущие значения должны быть в вашем конечном измерении? »

Мой ответ: «Поток не содержит нескольких изменений в одной и той же строке, только сетевое изменение в нем. Попробуйте обновить строку более одного раза перед обработкой потока. Обратите внимание, что в потоке только окончательное значение. "


Любые рекомендации о том, как действовать?

1 Ответ

1 голос
/ 21 октября 2019

Проще говоря, описанное вами поведение - это то, как потоки работают в Snowflake. Они не должны учитываться, и журнал аудита таблицы.

Вы можете запускать задачи и обрабатывать поток с меньшими интервалами, но при наличии нескольких изменений в исходной таблице доступна только сеть операций DML. в потоке, когда он обрабатывается.

Как быстро вы ожидаете обновления в исходной таблице для данной уникальной записи?

...