From 360ed5ccb2c3da3e1c5cf5543836b04a6244dcc1 Mon Sep 17 00:00:00 2001 From: Umang Mistry Date: Thu, 22 Feb 2024 15:25:47 -0600 Subject: [PATCH] Added log audit table & sp. Update pipeline to use diff role for dev envs --- bitbucket-pipelines.yml | 6 ++-- snowflake/scripts/R__001_LOG_AUDIT.sql | 29 ++++++++++++++++++++ snowflake/scripts/R__002_LOG_AUDIT_TABLE.sql | 11 ++++++++ snowflake/scripts/R__admin_test_pipe.sql | 14 ---------- 4 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 snowflake/scripts/R__001_LOG_AUDIT.sql create mode 100644 snowflake/scripts/R__002_LOG_AUDIT_TABLE.sql delete mode 100644 snowflake/scripts/R__admin_test_pipe.sql diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index d47f863..16e644c 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -17,9 +17,9 @@ definitions: - pip install snowflake-connector-python - pip install schemachange --upgrade # Setting the database name dynamically based on the branch name - - if [ "$BITBUCKET_BRANCH" == "DEV" ]; then export SNOWFLAKE_DATABASE=$DEV_SNOWFLAKE_DATABASE; fi - - if [ "$BITBUCKET_BRANCH" == "UAT" ]; then export SNOWFLAKE_DATABASE=$UAT_SNOWFLAKE_DATABASE; fi - - if [ "$BITBUCKET_BRANCH" == "PROD" ]; then export SNOWFLAKE_DATABASE=$PROD_SNOWFLAKE_DATABASE; fi + - if [ "$BITBUCKET_BRANCH" == "DEV" ]; then export SNOWFLAKE_DATABASE=$DEV_SNOWFLAKE_DATABASE; export SNOWFLAKE_ROLE=$DEV_SNOWFLAKE_ROLE; fi + - if [ "$BITBUCKET_BRANCH" == "UAT" ]; then export SNOWFLAKE_DATABASE=$UAT_SNOWFLAKE_DATABASE; export SNOWFLAKE_ROLE=$UAT_SNOWFLAKE_ROLE; fi + - if [ "$BITBUCKET_BRANCH" == "PROD" ]; then export SNOWFLAKE_DATABASE=$PROD_SNOWFLAKE_DATABASE; export SNOWFLAKE_ROLE=$PROD_SNOWFLAKE_ROLE; fi - schemachange -a $SNOWFLAKE_ACCOUNT -u $SNOWFLAKE_USER -r $SNOWFLAKE_ROLE -w $SNOWFLAKE_WAREHOUSE -d $SNOWFLAKE_DATABASE -c $SNOWFLAKE_DATABASE.SCHEMACHANGE.CHANGE_HISTORY --create-change-history-table -v trigger: automatic # uncomment after testing # trigger: manual diff --git a/snowflake/scripts/R__001_LOG_AUDIT.sql b/snowflake/scripts/R__001_LOG_AUDIT.sql new file mode 100644 index 0000000..75fc24c --- /dev/null +++ b/snowflake/scripts/R__001_LOG_AUDIT.sql @@ -0,0 +1,29 @@ +CREATE OR REPLACE PROCEDURE STG.LOG_AUDIT("PROC_NAME" VARCHAR(255), "SUB_SECTION_NAME" VARCHAR(255), "AUDIT_SID" FLOAT, "ACTION_FLAG" VARCHAR(255)) +RETURNS VARCHAR(16777216) +LANGUAGE SQL +EXECUTE AS CALLER +AS +' +BEGIN + BEGIN TRANSACTION; + + IF (:ACTION_FLAG = ''START'') THEN + INSERT INTO STG.LOG_AUDIT (EXECUTION_DT, START_DT, PROCEDURE_NAME, SUB_SECTION_NAME, AUDIT_SID) + VALUES (CURRENT_DATE(), CURRENT_TIMESTAMP(), :PROC_NAME, :SUB_SECTION_NAME, :AUDIT_SID); + END IF; + + IF (:ACTION_FLAG = ''END'') THEN + UPDATE STG.LOG_AUDIT + SET QUERY_ID = LAST_QUERY_ID(-2), END_DT = CURRENT_TIMESTAMP(), TOTAL_MIN = DATEDIFF(Minute, START_DT, CURRENT_TIMESTAMP()) + WHERE PROCEDURE_NAME = :PROC_NAME AND SUB_SECTION_NAME = :SUB_SECTION_NAME AND AUDIT_SID = :AUDIT_SID AND END_DT IS NULL; + + ELSE + COMMIT; + RETURN ''Incorrect Action Flag Used''; + + END IF; + + COMMIT; + RETURN ''Completed''; +END;' +; \ No newline at end of file diff --git a/snowflake/scripts/R__002_LOG_AUDIT_TABLE.sql b/snowflake/scripts/R__002_LOG_AUDIT_TABLE.sql new file mode 100644 index 0000000..1cc0768 --- /dev/null +++ b/snowflake/scripts/R__002_LOG_AUDIT_TABLE.sql @@ -0,0 +1,11 @@ +create or replace TABLE STG.LOG_AUDIT ( + UNIQUE_KEY NUMBER(38,0) NOT NULL autoincrement start 1 increment 1 order, + EXECUTION_DT DATE, + QUERY_ID VARCHAR(100) COLLATE 'en-ci', + START_DT TIMESTAMP_NTZ(9), + END_DT TIMESTAMP_NTZ(9), + PROCEDURE_NAME VARCHAR(255) COLLATE 'en-ci', + SUB_SECTION_NAME VARCHAR(255) COLLATE 'en-ci', + AUDIT_SID NUMBER(38,0), + TOTAL_MIN NUMBER(38,0) +); \ No newline at end of file diff --git a/snowflake/scripts/R__admin_test_pipe.sql b/snowflake/scripts/R__admin_test_pipe.sql deleted file mode 100644 index 2d55452..0000000 --- a/snowflake/scripts/R__admin_test_pipe.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE IF NOT EXISTS CHC_DW.DIM_DATE -( - DATE_KEY INT NOT NULL, - DATE_VALUE DATE NOT NULL, - DAY_OF_WEEK INT NOT NULL, - DAY_NAME VARCHAR(10) NOT NULL, - DAY_OF_MONTH INT NOT NULL, - DAY_OF_YEAR INT NOT NULL, - WEEK_OF_YEAR INT NOT NULL, - MONTH_NAME VARCHAR(10) NOT NULL, - MONTH_OF_YEAR INT NOT NULL, - QUARTER INT NOT NULL, - PRIMARY KEY (DATE_KEY) -); \ No newline at end of file