SQL_CODE
SQL_CODE
LIST @SCD_DB.SCD_SC.CUSTOMER_EXT_STAGE;
SELECT SYSTEM$PIPE_STATUS('CUSTOMER_RAW_S3_PIPE');
-- SET THE ACTIVE ROLE TO ACCOUNTADMIN BEFORE GRANTING THE EXECUTE TASK PRIVILEGE
TO TASKADMIN
USE ROLE ACCOUNTADMIN;
GRANT EXECUTE TASK ON ACCOUNT TO ROLE TASKADMIN;
-- SET THE ACTIVE ROLE TO SECURITYADMIN TO SHOW THAT THIS ROLE CAN GRANT A ROLE TO
ANOTHER ROLE
USE ROLE SECURITYADMIN;
GRANT ROLE TASKADMIN TO ROLE SYSADMIN;
SHOW TASKS;
--STREAM
UPDATE CUSTOMER
SET FIRST_NAME = 'JESSICA', UPDATE_TIMESTAMP = CURRENT_TIMESTAMP()::TIMESTAMP_NTZ
WHERE CUSTOMER_ID = 72;
--VIEW CREATION--
-- This subquery figures out what to do when data is updated in the customer table
-- An update to the customer table results in an update AND an insert to the
customer_HISTORY table
-- The subquery below generates two records, each with a different dml_type
SELECT CUSTOMER_ID, FIRST_NAME, LAST_NAME, EMAIL, STREET, CITY, STATE, COUNTRY,
UPDATE_TIMESTAMP AS START_TIME,
LAG(UPDATE_TIMESTAMP) OVER (PARTITION BY CUSTOMER_ID ORDER BY UPDATE_TIMESTAMP
DESC) AS END_TIME_RAW,
CASE WHEN END_TIME_RAW IS NULL THEN '9999-12-31'::TIMESTAMP_NTZ ELSE END_TIME_RAW
END AS END_TIME,
CASE WHEN END_TIME_RAW IS NULL THEN TRUE ELSE FALSE END AS IS_CURRENT, DML_TYPE
FROM(-- Identify data to insert into customer_history table
SELECT CUSTOMER_ID, FIRST_NAME, LAST_NAME, EMAIL, STREET,
CITY,STATE,COUNTRY, update_timestamp, 'I' as DML_TYPE
FROM customer_table_changes
WHERE metadata$action = 'INSERT'
AND metadata$isupdate = 'TRUE'
UNION
-- Identify data in customer_HISTORY table that needs to be updated
SELECT CUSTOMER_ID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, START_TIME,
'U' AS DML_TYPE
FROM CUSTOMER_HISTORY
WHERE CUSTOMER_ID IN
(SELECT DISTINCT CUSTOMER_ID
FROM CUSTOMER_TABLE_CHANGES
WHERE metadata$action = 'DELETE'
AND metadata$isupdate = 'TRUE')
AND IS_CURRENT = TRUE))
UNION
-- This subquery figures out what to do when data is deleted from the customer
table
-- A deletion from the customer table results in an update to the customer_HISTORY
table
SELECT CTC.CUSTOMER_ID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, CH.START_TIME,
CURRENT_TIMESTAMP()::TIMESTAMP_NTZ,
NULL, 'D' AS DML_TYPE
FROM
CUSTOMER_HISTORY CH
INNER JOIN CUSTOMER_TABLE_CHANGES CTC
ON CH.CUSTOMER_ID = CTC.CUSTOMER_ID
WHERE CTC.metadata$action = 'DELETE'
AND CTC.metadata$isupdate = 'FALSE'
AND CH.IS_CURRENT = TRUE;
SHOW TASKS;