Выполните SCD2 на таблице снежинок на основе входных данных оракула - PullRequest
1 голос
/ 25 октября 2019

В настоящее время я получаю данные из oracle

Как часть начальной загрузки, они загружают все данные истории из таблицы oracle_a в таблицу снежинок "snow_a", используя именованный этап, и копируют в команды.

Iхотел бы выполнить SCD2 для таблицы snow_a на основе таблицы oracle_a.

Я имею в виду, если какая-либо новая запись будет добавлена ​​в таблицу Oracle_a, то эта запись будет добавлена ​​и любые изменения в существующей записи таблицы oracle_a,

существующая запись таблицы snow_a, срок действия которой истекает, и вставьте запись. Дальнейшие подробности см. На изображении ниже.

В таблице oracle_a есть ключевые столбцы key_col1, key_col2, key_col3, как указано на изображении ниже. attr1 и attr2 - другие атрибуты таблицы введите описание изображения здесь

Ответы [ 4 ]

2 голосов
/ 28 октября 2019

Реализация функциональности SCD типа 2 для таблицы в Snowflake ничем не отличается от любой другой реляционной базы данных. Тем не менее, есть дополнительные функции, которые могут помочь в этом процессе. Пожалуйста, ознакомьтесь с этой статьей в блоге об использовании потоков и задач Snowflake для выполнения логики SCD. https://www.snowflake.com/blog/building-a-type-2-slowly-changing-dimension-in-snowflake-using-streams-and-tasks-part-1/

Приветствия, Майкл Рейни

0 голосов
/ 04 ноября 2019

Я выполнил следующие шаги для выполнения SCD2.

  1. Загруженные данные таблицы Oracle_a в таблицу TEMPORARY scd2_temp
  2. Выполнено обновление на snow_a для истечения срока действия «измененных записей» путем объединения ключевых столбцов и проверкиостальные атрибуты
  3. вставлены в таблицу snow_a из таблицы TEMPORARY scd2_temp в таблицу snow_a
0 голосов
/ 28 октября 2019

Исходя из вопроса, кажется, что входящие строки Oracle не содержат столбцов типа SCD2 и что, когда каждая строка, вставленная в снежинку, должна быть вставлена ​​с использованием функциональности типа SCD2.

Столбцы SCD2 могут иметь конкретное значение для бизнеса, так что exp_ts может быть фактической датой или деловой датой. Снежинка «Сцена» не включает в себя функциональность SCD2. Обычно это роль среды ETL, а не утилита быстрой / массовой загрузки.

Большинство поставщиков ETL имеют функции SCD2 как часть своего предложения.

0 голосов
/ 25 октября 2019

Ладно, вот что я нашел - хотя вам, возможно, потребуется отрегулировать, откуда пришло обновление и вставка - поскольку oracle_a отсутствует в Snowflake.

CREATE TABLE snowflake_a(key_col1 varchar(10), key_col2 varchar(10), key_col3 varchar(10), attr1 varchar(8), attr2 varchar(10), eff_ts TIMESTAMP, exp_ts TIMESTAMP, valid varchar(10)); 

DROP table oracle_a;
INSERT INTO snowflake_a VALUES('PT_1', 'DL_1', 'RPT_1', 'Address1', 'APT_1', current_date, current_date, 'Active');


CREATE TABLE oracle_a(key_col1 varchar(10), key_col2 varchar(10), key_col3 varchar(10), attr1 varchar(8), attr2 varchar(8), eff_ts TIMESTAMP, exp_ts TIMESTAMP); 

INSERT INTO oracle_a
VALUES( 'PT_1', 'DL_1', 'RPT_1', 'Address1', 'APT_1', '10/24/2019', '12/31/1999');


UPDATE snowflake_a
   SET valid = 'Expired'
WHERE valid LIKE '%Active%';

SELECT * FROM snowflake_a;

INSERT INTO snowflake_a VALUES( 'PT_1', 'DL_1', 'RPT_1', 'Address1', 'APT_1', '10/24/2019', '12/31/1999', 'Active');

SELECT * FROM snowflake_a;

enter image description here

Или еще лучше: что мы используем для подключения вашей экосистемы Oracle к экосистеме Снежинка?

...