Professional Documents
Culture Documents
Streams
========
USE DATABASE MYOWN_DB;
=============
Only Inserts
=============
// Insert some data into Stage source table
INSERT INTO STAGE_TBLS.STG_EMPL VALUES
(1, 'Amar', 80000, 35, 'SALES', 'Bangalore'),
(2, 'Bharath', 45000, 26, 'SALES', 'Hyderabad'),
(3, 'Charan', 76000, 34, 'TECHNOLOGY', 'Chennai'),
(4, 'Divya', 52000, 28, 'HR', 'Hyderabad'),
(5, 'Gopal', 24500, 22, 'TECHNOLOGY', 'Bangalore'),
(6, 'Haritha', 42000, 27, 'HR', 'Chennai')
;
=============
Only Updates
=============
SELECT * FROM STAGE_TBLS.STG_EMPL;
======================
All changes at a time
======================
SELECT * FROM STAGE_TBLS.STG_EMPL;
// Consume all changes from stream and merge into final table
MERGE INTO INTG_TBLS.EMPL T
USING MYSTREAMS.STREAM_EMPL S
ON T.EMPID = S.EMPID
WHEN MATCHED -- DELETE condition
AND S.METADATA$ACTION ='DELETE'
AND S.METADATA$ISUPDATE = 'FALSE'
THEN DELETE
WHEN MATCHED -- UPDATE condition
AND S.METADATA$ACTION ='INSERT'
AND S.METADATA$ISUPDATE = 'TRUE'
THEN UPDATE
SET T.EMPNAME = S.EMPNAME,
T.SALARY = S.SALARY,
T.AGE = S.AGE,
T.DEPT = S.DEPT,
T.LOCATION = S.LOCATION,
T.LST_UPDT_DT = CURRENT_DATE
WHEN NOT MATCHED -- INSERT records
AND S.METADATA$ACTION ='INSERT'
AND S.METADATA$ISUPDATE = 'FALSE'
THEN INSERT( EMPID, EMPNAME, SALARY, AGE, DEPT, LOCATION, INSRT_DT,
LST_UPDT_DT)
VALUES(S.EMPID, S.EMPNAME, S.SALARY, S.AGE, S.DEPT, S.LOCATION, CURRENT_DATE,
NULL)
;
===================
Streams with Tasks
===================
CREATE OR REPLACE TASK MYTASKS.TASK_EMPL_DATA_LOAD
WAREHOUSE = MYOWN_WH
SCHEDULE = '5 MINUTES'
WHEN SYSTEM$STREAM_HAS_DATA('MYSTREAMS.STREAM_EMPL')
AS
MERGE INTO INTG_TBLS.EMPL T
USING MYSTREAMS.STREAM_EMPL S
ON T.EMPID = S.EMPID
WHEN MATCHED
AND S.METADATA$ACTION ='DELETE'
AND S.METADATA$ISUPDATE = 'FALSE'
THEN DELETE
WHEN MATCHED
AND S.METADATA$ACTION ='INSERT'
AND S.METADATA$ISUPDATE = 'TRUE'
THEN UPDATE
SET T.EMPNAME = S.EMPNAME,
T.SALARY = S.SALARY,
T.AGE = S.AGE,
T.DEPT = S.DEPT,
T.LOCATION = S.LOCATION,
T.LST_UPDT_DT = CURRENT_DATE
WHEN NOT MATCHED
AND S.METADATA$ACTION ='INSERT'
AND S.METADATA$ISUPDATE = 'FALSE'
THEN INSERT( EMPID, EMPNAME, SALARY, AGE, DEPT, LOCATION, INSRT_DT,
LST_UPDT_DT)
VALUES(S.EMPID, S.EMPNAME, S.SALARY, S.AGE, S.DEPT, S.LOCATION, CURRENT_DATE,
NULL)
;
==============================================================
How to build type 2 dimensions in snowflake by using streams?
==============================================================
// Please go through below links, explained with example