Ejemplo n.º 1
0
def d210(cf, source_output_path, STG_tables, Loading_Type):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    INS_DTTM = ",CURRENT_TIMESTAMP AS INS_DTTM \n"
    MODIFICATION_TYPE_found = 0
    stg_tables_df = funcs.get_stg_tables(STG_tables, None)
    for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
        Table_name = stg_tables_df_row['Table name']

        create_stg_view = "REPLACE VIEW " + cf.v_stg + "." + Table_name + " AS LOCK ROW FOR ACCESS \n"
        create_stg_view = create_stg_view + "SELECT\n"

        STG_table_columns = funcs.get_stg_table_columns(
            STG_tables, None, Table_name)

        for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows(
        ):
            Column_name = STG_table_columns_row['Column name']
            if Column_name == "MODIFICATION_TYPE":
                MODIFICATION_TYPE_found = 1

            comma = ',' if STG_table_columns_index > 0 else ' '
            comma_Column_name = comma + Column_name

            create_stg_view = create_stg_view + comma_Column_name + "\n"

        if MODIFICATION_TYPE_found == 0:
            MODIFICATION_TYPE = ",MODIFICATION_TYPE\n"
        else:
            MODIFICATION_TYPE = ""

        create_stg_view = create_stg_view + MODIFICATION_TYPE + INS_DTTM
        create_stg_view = create_stg_view + "from " + cf.T_STG + "." + Table_name + ";\n\n"
        f.write(create_stg_view)
    f.close()
Ejemplo n.º 2
0
def d415(cf, source_output_path, STG_tables):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    try:
        stg_tables_df = funcs.get_stg_tables(STG_tables)
        for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
            stg_table_name = stg_tables_df_row['Table name']

            del_script = "DEL FROM " + cf.GCFR_V + ".GCFR_Transform_KeyCol "
            del_script = del_script + " WHERE OUT_DB_NAME = '" + cf.SI_VIEW + "' AND OUT_OBJECT_NAME = '" + stg_table_name + "';\n"

            STG_table_columns = funcs.get_stg_table_columns(STG_tables, None, stg_table_name, True)

            exe_ = "EXEC " + cf.MACRO_DB + ".GCFR_Register_Tfm_KeyCol('" + cf.SI_VIEW + "'"
            _p = ",'" + stg_table_name + "'"
            _p = _p + ",'SEQ_NO' );\n\n"
            exe_p = exe_ + _p
            exe_p_ = ""
            for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows():
                if STG_table_columns_row['PK'].upper() == 'Y':
                    Column_name = STG_table_columns_row['Column name']

                    _p = ",'" + stg_table_name + "'"
                    _p = _p + ",'" + Column_name + "' );\n"

                    exe_p_ = exe_p_ + exe_ + _p

            exe_p = exe_p_ + "\n" if exe_p_ != "" else exe_p

            f.write(del_script)
            f.write(exe_p)
    except:
        funcs.TemplateLogError(cf.output_path, source_output_path, file_name, traceback.format_exc()).log_error()

    f.close()
Ejemplo n.º 3
0
def stgCounts(cf, source_output_path, System, STG_tables, LOADING_TYPE, flag):
    file_name = funcs.get_file_name(__file__) + '_' + flag
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    if flag == 'Accepted':
        template_path = cf.templates_path + "/" + pm.compareSTGacccounts_template_filename
        file_name += '_' + flag
    else:
        template_path = cf.templates_path + "/" + pm.compareSTGcounts_template_filename
    smx_path = cf.smx_path
    template_string = ""
    try:
        REJ_TABLE_NAME = System['Rejection Table Name']
    except:
        REJ_TABLE_NAME = ''
    try:
        REJ_TABLE_RULE = System['Rejection Table Rules']
    except:
        REJ_TABLE_RULE = ''
    try:
        source_DB = System['Source DB']
    except:
        source_DB = ''

    try:
        template_file = open(template_path, "r")
    except:
        template_file = open(smx_path, "r")
    if LOADING_TYPE == 'ONLINE':
        LOADING_TYPE = 'STG_ONLINE'
    else:
        LOADING_TYPE = 'STG_LAYER'
    for i in template_file.readlines():
        if i != "":
            template_string = template_string + i
    stg_table_names = funcs.get_stg_tables(STG_tables)
    for stg_tables_df_index, stg_tables_df_row in stg_table_names[
        (stg_table_names['Table name'] != REJ_TABLE_NAME)
            & (stg_table_names['Table name'] != REJ_TABLE_RULE)].iterrows():
        TABLE_NAME = stg_tables_df_row['Table name']
        TBL_PKs = TDDL.get_trgt_pk(STG_tables, TABLE_NAME)
        if flag == 'Accepted':
            output_script = template_string.format(
                TABLE_NAME=TABLE_NAME,
                STG_DATABASE=cf.T_STG,
                source_DB=source_DB,
                LOADING_TYPE=LOADING_TYPE,
                REJ_TABLE_NAME=REJ_TABLE_NAME,
                REJ_TABLE_RULE=REJ_TABLE_RULE,
                TBL_PKs=TBL_PKs)
        else:
            output_script = template_string.format(TABLE_NAME=TABLE_NAME,
                                                   STG_DATABASE=cf.T_STG,
                                                   WRK_DATABASE=cf.t_WRK,
                                                   source_DB=source_DB)

        seperation_line = '--------------------------------------------------------------------------------------------------------------------------------------------------------------------'
        output_script = output_script.upper(
        ) + '\n' + seperation_line + '\n' + seperation_line + '\n'
        f.write(output_script.replace('Â', ' '))
    f.close()
Ejemplo n.º 4
0
def d400(cf, source_output_path, STG_tables):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    stg_tables_df = funcs.get_stg_tables(STG_tables)
    for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
        Table_name = stg_tables_df_row['Table name']
        Fallback = ', Fallback' if stg_tables_df_row['Fallback'].upper(
        ) == 'Y' else ''

        create_stg_table = "create multiset table " + cf.SI_DB + "." + Table_name + Fallback + "\n" + "(\n"

        STG_table_columns = funcs.get_stg_table_columns(
            STG_tables, None, Table_name, True)

        pi_columns = ""
        for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows(
        ):
            Column_name = STG_table_columns_row['Column name']

            comma = ',' if STG_table_columns_index > 0 else ' '
            comma_Column_name = comma + Column_name

            Data_type = str(STG_table_columns_row['Data type'])
            character_set = " CHARACTER SET UNICODE NOT CASESPECIFIC " if "CHAR" in Data_type.upper(
            ) or "VARCHAR" in Data_type.upper() else ""
            not_null = " not null " if STG_table_columns_row['Mandatory'].upper(
            ) == 'Y' or STG_table_columns_row['PK'].upper() == 'Y' else " "

            create_stg_table = create_stg_table + comma_Column_name + " " + Data_type + character_set + not_null + "\n"

            if STG_table_columns_row['PK'].upper() == 'Y':
                pi_columns = pi_columns + ',' + Column_name if pi_columns != "" else Column_name

        extra_columns = ",Start_Ts\tTIMESTAMP(6) WITH TIME ZONE \n" \
                        + ",End_Ts\tTIMESTAMP(6) WITH TIME ZONE \n"\
                        + ",Start_Date\tDATE FORMAT 'YYYY-MM-DD' \n" \
                        + ",End_Date\tDATE FORMAT 'YYYY-MM-DD' \n" \
                        + ",Record_Deleted_Flag\tBYTEINT\n" \
                        + ",Ctl_Id\tSMALLINT COMPRESS(997)\n" \
                        + ",File_Id\tSMALLINT\n" \
                        + ",Process_Name\tVARCHAR(128)\n" \
                        + ",Process_Id\tINTEGER\n" \
                        + ",Update_Process_Name\tVARCHAR(128) \n" \
                        + ",Update_Process_Id\tINTEGER\n"

        if pi_columns == "":
            pi_columns = "SEQ_NO"
            seq_column = ",SEQ_NO DECIMAL(10,0) NOT NULL GENERATED ALWAYS AS IDENTITY\n\t (START WITH 1 INCREMENT BY 1  MINVALUE 1  MAXVALUE 2147483647  NO CYCLE)\n"
        else:
            seq_column = ""

        Primary_Index = ")Primary Index (" + pi_columns + ")"

        create_stg_table = create_stg_table + extra_columns + seq_column + Primary_Index
        create_stg_table = create_stg_table + ";\n\n"
        f.write(create_stg_table)
    f.close()
Ejemplo n.º 5
0
def d215(cf, source_output_path, source_name, System, STG_tables):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    smx_path = cf.smx_path
    template_path = cf.templates_path + "/" + pm.D215_template_filename
    template_string = ""
    try:
        REJ_TABLE_NAME = System['Rejection Table Name']
    except:
        REJ_TABLE_NAME = ''
    try:
        REJ_TABLE_RULE = System['Rejection Table Rules']
    except:
        REJ_TABLE_RULE = ''

    try:
        source_DB = System['Source DB']
    except:
        source_DB = ''

    try:
        template_file = open(template_path, "r")
    except:
        template_file = open(smx_path, "r")

    for i in template_file.readlines():
        if i != "":
            template_string = template_string + i
    stg_table_names = funcs.get_stg_tables(STG_tables)
    for stg_tables_df_index, stg_tables_df_row in stg_table_names[(stg_table_names['Table name'] != REJ_TABLE_NAME) & (stg_table_names['Table name'] != REJ_TABLE_RULE)].iterrows():
        TABLE_NAME = stg_tables_df_row['Table name']
        TABLE_COLUMNS = funcs.get_stg_table_columns(STG_tables, source_name, TABLE_NAME)
        TBL_PKs = TDDL.get_trgt_pk(STG_tables, TABLE_NAME)
        STG_TABLE_COLUMNS = ""
        WRK_TABLE_COLUMNS = ""
        lengthh = len(TABLE_COLUMNS)
        for stg_tbl_index, stg_tbl_row in TABLE_COLUMNS.iterrows():
            align = '' if stg_tbl_index >= lengthh - 1 else '\n\t'
            STG_TABLE_COLUMNS += 'STG_TBL.' + '"' + stg_tbl_row['Column name'] + '"' + ',' + align
            WRK_TABLE_COLUMNS += 'WRK_TBL.' + '"' + stg_tbl_row['Column name'] + '"' + ',' + align
        output_script = template_string.format(TABLE_NAME=TABLE_NAME,
                                               STG_TABLE_COLUMNS=STG_TABLE_COLUMNS,
                                               WRK_TABLE_COLUMNS=WRK_TABLE_COLUMNS,
                                               STG_DATABASE=cf.T_STG,
                                               WRK_DATABASE=cf.t_WRK,
                                               STG_VDATABASE=cf.v_stg,
                                               REJ_TABLE_NAME=REJ_TABLE_NAME,
                                               REJ_TABLE_RULE=REJ_TABLE_RULE,
                                               TBL_PKs=TBL_PKs,
                                               source_DB=source_DB
                                               )
        output_script = output_script.upper() + '\n' + '\n' + '\n'
        f.write(output_script.replace('Â', ' '))
    f.close()
Ejemplo n.º 6
0
def d110(cf, source_output_path, stg_Table_mapping, STG_tables, Loading_Type):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    source_t = cf.online_source_t if Loading_Type == "ONLINE" else cf.offline_source_t
    if cf.staging_view_db == '':
        source_v = cf.online_source_v if Loading_Type == "ONLINE" else cf.offline_source_v
    else:
        source_v = cf.staging_view_db
    stg_tables_df = funcs.get_stg_tables(STG_tables, None)
    for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
        Table_name = stg_tables_df_row['Table name']
        try:
            where_clause = "\nWhere "
            where_clause = where_clause + str(stg_Table_mapping.loc[
                (stg_Table_mapping['Mapping name']
                 == Table_name)]['Filter criterion'].values[0])
            where_clause = where_clause.replace("#SRC#", source_t)
        except:
            where_clause = ""
        for stg_Table_mapping_index, stg_Table_mapping_row in stg_Table_mapping.iterrows(
        ):
            if stg_Table_mapping_row['Mapping name'] == Table_name:
                if stg_Table_mapping_row['Source layer'] == 'MATCHING':
                    source_t = cf.db_prefix + 'V_ANALYTICS'

        create_stg_view = "REPLACE VIEW " + source_v + "." + Table_name + " AS LOCK ROW FOR ACCESS \n"
        create_stg_view = create_stg_view + "SELECT\n"

        STG_table_columns = funcs.get_stg_table_columns(
            STG_tables, None, Table_name)

        for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows(
        ):
            Column_name_as_src = '"' + STG_table_columns_row[
                'Column name in source'] + '"'
            Column_name = '"' + STG_table_columns_row['Column name'] + '"'
            column_transformation_rule = str(
                STG_table_columns_row['Column Transformation Rule'])
            # Column_name = (column_transformation_rule + " AS " + Column_name) if column_transformation_rule != "" else  Column_name

            if column_transformation_rule != "":
                Column_name = (column_transformation_rule + " AS " +
                               Column_name)
            else:
                Column_name = (Column_name_as_src + " AS " + Column_name)

            comma = ',' if STG_table_columns_index > 0 else ' '
            comma_Column_name = comma + Column_name

            create_stg_view = create_stg_view + comma_Column_name + "\n"

        create_stg_view = create_stg_view + "from " + source_t + "." + Table_name + " t " + where_clause + ";\n\n"
        f.write(create_stg_view)
    f.close()
Ejemplo n.º 7
0
def d410(cf, source_output_path, STG_tables):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    stg_tables_df = funcs.get_stg_tables(STG_tables)
    for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
        stg_table_name = stg_tables_df_row['Table name']

        script = "REPLACE VIEW " + cf.SI_VIEW + "." + stg_table_name + " AS\n"
        script = script + "SELECT * FROM " + cf.SI_DB + "." + stg_table_name + ";\n\n"

        f.write(script)
    f.close()
Ejemplo n.º 8
0
def d001(cf, source_output_path, source_name, STG_tables):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    f.write("delete from " + cf.GCFR_t + "." + cf.SOURCE_TABLES_LKP_table +
            " where SOURCE_NAME = '" + source_name + "';\n\n")
    stg_tables_df = funcs.get_stg_tables(STG_tables, source_name=None)
    for STG_tables_index, STG_tables_row in stg_tables_df.iterrows():
        Table_name = STG_tables_row['Table name']
        f.write("insert into " + cf.GCFR_t + "." + cf.SOURCE_TABLES_LKP_table +
                "(SOURCE_NAME, TABLE_NAME)\n")
        f.write("VALUES ('" + source_name + "', '" + Table_name + "')" + ";\n")
        f.write("\n")
    f.close()
Ejemplo n.º 9
0
def d410(cf, source_output_path, STG_tables):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    try:
        stg_tables_df = funcs.get_stg_tables(STG_tables)
        for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
            stg_table_name = stg_tables_df_row['Table name']

            script = "REPLACE VIEW " + cf.SI_VIEW + "." + stg_table_name + " AS\n"
            script = script + "SELECT * FROM " + cf.SI_DB + "." + stg_table_name + ";\n\n"

            f.write(script)
    except:
        funcs.TemplateLogError(cf.output_path, source_output_path, file_name,
                               traceback.format_exc()).log_error()
    f.close()
Ejemplo n.º 10
0
def dataValidation(cf, source_output_path, source_name, System, STG_tables,
                   LOADING_TYPE, flag):
    file_name = funcs.get_file_name(__file__) + '_' + flag
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    if flag == 'Accepted':
        template_path = cf.templates_path + "/" + pm.dataValidation_template_filename
        file_name += '_' + flag
    else:
        template_path = cf.templates_path + "/" + pm.dataValidationAll_template_filename
    smx_path = cf.smx_path
    template_string = ""
    try:
        REJ_TABLE_NAME = System['Rejection Table Name']
    except:
        REJ_TABLE_NAME = ''
    try:
        REJ_TABLE_RULE = System['Rejection Table Rules']
    except:
        REJ_TABLE_RULE = ''

    try:
        source_DB = System['Source DB']
    except:
        source_DB = ''

    try:
        template_file = open(template_path, "r")
    except:
        template_file = open(smx_path, "r")

    for i in template_file.readlines():
        if i != "":
            template_string = template_string + i
    stg_table_names = funcs.get_stg_tables(STG_tables)
    if LOADING_TYPE == 'ONLINE':
        LOADING_TYPE = 'STG_ONLINE'
    else:
        LOADING_TYPE = 'STG_LAYER'
    for stg_tables_df_index, stg_tables_df_row in stg_table_names[
        (stg_table_names['Table name'] != REJ_TABLE_NAME)
            & (stg_table_names['Table name'] != REJ_TABLE_RULE)].iterrows():
        TABLE_NAME = stg_tables_df_row['Table name']
        TABLE_COLUMNS = funcs.get_stg_table_columns(STG_tables, source_name,
                                                    TABLE_NAME)
        TBL_PKs = TDDL.get_trgt_pk(STG_tables, TABLE_NAME)
        IBM_STG_TABLE_COLUMNS = ""
        TERADATA_STG_TABLE_COLUMNS = ""
        TERADATA_WRK_TABLE_COLUMNS = ""
        COUNT_COLS = ''
        lengthh = len(TABLE_COLUMNS)
        for stg_tbl_index, stg_tbl_row in TABLE_COLUMNS.iterrows():
            align = '' if stg_tbl_index >= lengthh - 1 else '\n\t\t'
            STGalign = '' if stg_tbl_index >= lengthh - 1 else '\n\t\t\t'
            IBM_STG_TABLE_COLUMNS += 'IBM_STG_TABLE.' + '"' + stg_tbl_row[
                'Column name'] + '"' + ',' + align
            TERADATA_STG_TABLE_COLUMNS += 'TERADATA_STG_TABLE.' + '"' + stg_tbl_row[
                'Column name'] + '"' + ',' + STGalign
            TERADATA_WRK_TABLE_COLUMNS += 'TERADATA_WRK_TABLE.' + '"' + stg_tbl_row[
                'Column name'] + '"' + ',' + STGalign
            COUNT_COLS += str(stg_tbl_index + 1) + ','
        COUNT_COLS = COUNT_COLS[0:len(COUNT_COLS) - 1]
        IBM_STG_TABLE_COLUMNS = IBM_STG_TABLE_COLUMNS[
            0:len(IBM_STG_TABLE_COLUMNS) - 1]
        TERADATA_STG_TABLE_COLUMNS = TERADATA_STG_TABLE_COLUMNS[
            0:len(TERADATA_STG_TABLE_COLUMNS) - 1]
        TERADATA_WRK_TABLE_COLUMNS = TERADATA_WRK_TABLE_COLUMNS[
            0:len(TERADATA_WRK_TABLE_COLUMNS) - 1]

        if flag == 'Accepted':
            output_script = template_string.format(
                TABLE_NAME=TABLE_NAME,
                IBM_STG_TABLE_COLUMNS=IBM_STG_TABLE_COLUMNS,
                TERADATA_STG_TABLE_COLUMNS=TERADATA_STG_TABLE_COLUMNS,
                STG_DATABASE=cf.T_STG,
                REJ_TABLE_NAME=REJ_TABLE_NAME,
                REJ_TABLE_RULE=REJ_TABLE_RULE,
                TBL_PKs=TBL_PKs,
                source_DB=source_DB,
                LOADING_TYPE=LOADING_TYPE,
                COUNT_COLS=COUNT_COLS)
        else:
            output_script = template_string.format(
                TABLE_NAME=TABLE_NAME,
                IBM_STG_TABLE_COLUMNS=IBM_STG_TABLE_COLUMNS,
                TERADATA_STG_TABLE_COLUMNS=TERADATA_STG_TABLE_COLUMNS,
                STG_DATABASE=cf.T_STG,
                REJ_TABLE_NAME=REJ_TABLE_NAME,
                REJ_TABLE_RULE=REJ_TABLE_RULE,
                TBL_PKs=TBL_PKs,
                source_DB=source_DB,
                LOADING_TYPE=LOADING_TYPE,
                COUNT_COLS=COUNT_COLS,
                WRK_DATABASE=cf.t_WRK,
                TERADATA_WRK_TABLE_COLUMNS=TERADATA_WRK_TABLE_COLUMNS)

        seperation_line = '--------------------------------------------------------------------------------------------------------------------------------------------------------------------'
        output_script = output_script.upper(
        ) + '\n' + seperation_line + '\n' + seperation_line + '\n'
        f.write(output_script.replace('Â', ' '))
    f.close()
Ejemplo n.º 11
0
def d200(cf, source_output_path, STG_tables, Loading_Type):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    MODIFICATION_TYPE_found = 0
    INS_DTTM = ",INS_DTTM  TIMESTAMP(6) NOT NULL \n"
    try:
        stg_tables_df = funcs.get_stg_tables(STG_tables, None)
        for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
            Table_name = stg_tables_df_row['Table name']

            Fallback = ', Fallback' if stg_tables_df_row['Fallback'].upper(
            ) == 'Y' else ''

            create_stg_table = "create multiset table " + cf.T_STG + "." + Table_name + Fallback + "\n" + "(\n"
            create_wrk_table = "create multiset table " + cf.t_WRK + "." + Table_name + Fallback + "\n" + "(\n"

            STG_table_columns = funcs.get_stg_table_columns(
                STG_tables, None, Table_name, False)
            pi_columns = ""
            for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows(
            ):
                Column_name = STG_table_columns_row['Column name']
                if Column_name == "MODIFICATION_TYPE":
                    MODIFICATION_TYPE_found = 1
                comma = ',' if STG_table_columns_index > 0 else ' '
                comma_Column_name = comma + Column_name

                Data_type = str(STG_table_columns_row['Data type'])
                character_set = " CHARACTER SET UNICODE NOT CASESPECIFIC " if "CHAR" in Data_type.upper(
                ) or "VARCHAR" in Data_type.upper() else ""
                not_null = " not null " if STG_table_columns_row[
                    'Mandatory'].upper() == 'Y' or STG_table_columns_row[
                        'PK'].upper() == 'Y' else " "

                create_stg_table = create_stg_table + comma_Column_name + " " + Data_type + character_set + not_null + "\n"
                create_wrk_table = create_wrk_table + comma_Column_name + " " + Data_type + character_set + "\n"

                if STG_table_columns_row['PK'].upper() == 'Y':
                    pi_columns = pi_columns + ',' + Column_name if pi_columns != "" else Column_name

            wrk_extra_columns = ",REJECTED INTEGER\n" + ",BATCH_LOADED INTEGER\n" + ",NEW_ROW INTEGER\n"

            if pi_columns == "":
                pi_columns = "SEQ_NO"
                seq_column = ",SEQ_NO DECIMAL(10,0) NOT NULL GENERATED ALWAYS AS IDENTITY\n\t (START WITH 1 INCREMENT BY 1  MINVALUE 1  MAXVALUE 2147483647  NO CYCLE)\n"
            else:
                seq_column = ""

            Primary_Index = ")Primary Index (" + pi_columns + ")"

            if MODIFICATION_TYPE_found == 0 and Loading_Type == "OFFLINE_CDC":
                MODIFICATION_TYPE = ",MODIFICATION_TYPE char(1) CHARACTER SET UNICODE NOT CASESPECIFIC  not null\n"
            else:
                MODIFICATION_TYPE = ""
            create_stg_table = create_stg_table + MODIFICATION_TYPE + INS_DTTM + seq_column + Primary_Index
            create_wrk_table = create_wrk_table + MODIFICATION_TYPE + INS_DTTM + wrk_extra_columns + seq_column + Primary_Index

            create_stg_table = create_stg_table + ";\n\n"
            create_wrk_table = create_wrk_table + ";\n\n"

            f.write(create_stg_table)
            f.write(create_wrk_table)
    except:
        funcs.TemplateLogError(cf.output_path, source_output_path, file_name,
                               traceback.format_exc()).log_error()

    f.close()
Ejemplo n.º 12
0
def d200(cf, source_output_path, STG_tables, Loading_Type):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    MODIFICATION_TYPE_found = 0
    Data_mover_flag = cf.Data_mover_flag
    INS_DTTM = ",INS_DTTM  TIMESTAMP(6) NOT NULL \n"
    stg_tables_df = funcs.get_stg_tables(STG_tables, None)
    for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
        Table_name = stg_tables_df_row['Table name']

        Fallback = ', Fallback' if stg_tables_df_row['Fallback'].upper(
        ) == 'Y' else ''

        create_stg_table = "create multiset table " + cf.T_STG + "." + Table_name + Fallback + "\n" + "(\n"
        create_wrk_table = "create multiset table " + cf.t_WRK + "." + Table_name + Fallback + "\n" + "(\n"

        STG_table_columns = funcs.get_stg_table_columns(
            STG_tables, None, Table_name, False)
        pi_columns = ""
        MODIFICATION_TYPE_found = funcs.table_has_modification_type_column(
            STG_tables, Table_name)
        for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows(
        ):
            Column_name = STG_table_columns_row['Column name']
            comma = ',' if STG_table_columns_index > 0 else ' '
            comma_Column_name = comma + Column_name

            Data_type = str(STG_table_columns_row['Data type'])
            character_set = " CHARACTER SET UNICODE NOT CASESPECIFIC " if "CHAR" in Data_type.upper(
            ) or "VARCHAR" in Data_type.upper() else ""
            not_null = " not null " if STG_table_columns_row['Mandatory'].upper(
            ) == 'Y' or STG_table_columns_row['PK'].upper() == 'Y' else " "

            create_stg_table = create_stg_table + comma_Column_name + " " + Data_type + character_set + not_null + "\n"
            create_wrk_table = create_wrk_table + comma_Column_name + " " + Data_type + character_set + "\n"

            if STG_table_columns_row['PK'].upper() == 'Y':
                pi_columns = pi_columns + ',' + Column_name if pi_columns != "" else Column_name

        wrk_extra_columns = ",REJECTED INTEGER\n" + ",BATCH_LOADED INTEGER\n" + ",NEW_ROW INTEGER\n"

        if pi_columns == "":
            pi_columns = "SEQ_NO"
            seq_column = ",SEQ_NO DECIMAL(10,0) NOT NULL GENERATED ALWAYS AS IDENTITY\n\t (START WITH 1 INCREMENT BY 1  MINVALUE 1  MAXVALUE 2147483647  NO CYCLE)\n"
        else:
            seq_column = ""

        Primary_Index = ")Primary Index (" + pi_columns + ")\n"

        if MODIFICATION_TYPE_found == 0:
            MODIFICATION_TYPE = ",MODIFICATION_TYPE char(1) CHARACTER SET UNICODE NOT CASESPECIFIC  not null\n"
        else:
            MODIFICATION_TYPE = ""

        if Data_mover_flag == 1:
            Run_date_column = ", RUN_DATE TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP\n"
            partition_statement = "PARTITION BY RANGE_N(RUN_DATE BETWEEN TIMESTAMP '2020-03-03 00:00:00.000000+00:00' AND TIMESTAMP '2100-03-03 00:00:00.000000+00:00' EACH INTERVAL'1'DAY)\n"
        else:
            Run_date_column = ""
            partition_statement = ""

        create_stg_table = create_stg_table + MODIFICATION_TYPE + INS_DTTM + seq_column + Run_date_column + Primary_Index + partition_statement
        create_wrk_table = create_wrk_table + MODIFICATION_TYPE + INS_DTTM + wrk_extra_columns + seq_column + Run_date_column + Primary_Index + partition_statement

        create_stg_table = create_stg_table + ";\n\n"
        create_wrk_table = create_wrk_table + ";\n\n"

        f.write(create_stg_table)
        f.write(create_wrk_table)
    f.close()
Ejemplo n.º 13
0
def d420(cf, source_output_path, STG_tables, BKEY, BMAP, Loading_Type):
    file_name = funcs.get_file_name(__file__)
    f = funcs.WriteFile(source_output_path, file_name, "sql")
    try:
        separator = pm.stg_cols_separator
        stg_tables_df = funcs.get_stg_tables(STG_tables)

        bmap_physical_table = "BMAP_STANDARD_MAP"

        for stg_tables_df_index, stg_tables_df_row in stg_tables_df.iterrows():
            stg_table_name = stg_tables_df_row['Table name'].upper()

            stg_Natural_key_df = STG_tables.loc[
                (STG_tables['Table name'].str.upper() == stg_table_name)
                & (STG_tables['Natural key'] != "")]
            Natural_key_list = []
            for stg_Natural_key_df_index, stg_Natural_key_df_row in stg_Natural_key_df.iterrows(
            ):
                Natural_key_split = str(
                    stg_Natural_key_df_row['Natural key']).split(separator)
                for i in Natural_key_split:
                    Natural_key_list.append(i.upper())

            # Natural_key_list_str = funcs.list_to_string(Natural_key_list, ',').upper()

            stg_table_has_pk = True if len(STG_tables.loc[
                (STG_tables['Table name'].str.upper() == stg_table_name)
                & (STG_tables['PK'].str.upper() == 'Y')].index) > 0 else False

            if not stg_table_has_pk:
                seq_pk_col = " SEQ_NO\n,"
            else:
                seq_pk_col = " "

            create_view = "REPLACE VIEW " + cf.SI_VIEW + "." + stg_table_name + " AS LOCK ROW FOR ACCESS\nSELECT \n"
            from_clause = "FROM " + cf.v_stg + "." + stg_table_name + " t"
            STG_table_columns = funcs.get_stg_table_columns(
                STG_tables, None, stg_table_name, True)

            bkeys_query = ""
            bkeys_left_join_count = 0
            bmap_query = ""
            bmap_left_join_count = 0
            normal_columns = ""
            bkey_columns = ""
            bmap_columns = ""
            for STG_table_columns_index, STG_table_columns_row in STG_table_columns.iterrows(
            ):
                comma = ',' if STG_table_columns_index > 0 else seq_pk_col

                Column_name = STG_table_columns_row['Column name'].upper()
                Natural_key = str(STG_table_columns_row['Natural key']).upper()

                alias = Column_name
                Column_name = "t." + Column_name

                for i in list(set(Natural_key_list)):
                    i = i.replace(" ", "")
                    if alias == i or "COALESCE(" + alias + ",'')" == i:
                        if "COALESCE" in i:
                            Column_name = "COALESCE(" + Column_name + ",'')"
                        Column_name = "TRIM(Trailing '.' from TRIM(" + Column_name + ")) " + alias

                if Natural_key == "":
                    comma_Column_name = comma + Column_name
                    normal_columns = normal_columns + comma_Column_name + "\n"

                else:
                    trim_Natural_key = []
                    split_Natural_key = Natural_key.replace(
                        " ", "").split(separator)
                    for i in split_Natural_key:
                        trim_Natural_key.append(
                            "TRIM(Trailing '.' from TRIM(" + i.strip() + "))")
                    trimed_Natural_key = funcs.list_to_string(
                        trim_Natural_key, separator)

                    Key_domain_name = STG_table_columns_row[
                        'Key domain name'].upper()
                    if Key_domain_name != "":
                        BKEY_row = BKEY.loc[(BKEY['Key domain name'].str.upper(
                        ) == Key_domain_name)]
                        if len(BKEY_row.index) > 0:
                            bkey_physical_table = BKEY_row[
                                'Physical table'].values[0]
                            bkey_domain_id = str(
                                int(BKEY_row['Key domain ID'].values[0]))
                            bkeys_left_join_count = bkeys_left_join_count + 1
                            bk_alias = " bk" + str(bkeys_left_join_count)

                            bkeys_query = "( Select " + bk_alias + ".EDW_Key\n"
                            bkeys_query = bkeys_query + "\tFrom " + cf.UTLFW_v + "." + bkey_physical_table + bk_alias + "\n"
                            bkeys_query = bkeys_query + "\tWhere " + bk_alias + ".Source_Key = " + trimed_Natural_key + "\n"
                            bkeys_query = bkeys_query + "\tand " + bk_alias + ".Domain_ID = " + bkey_domain_id + ")"

                            comma_Column_name = comma + bkeys_query + " AS " + alias
                            bkey_columns = bkey_columns + comma_Column_name + "\n"

                    Code_domain_name = STG_table_columns_row[
                        "Code domain name"].upper()
                    if Code_domain_name != "":
                        BMAP_row = BMAP.loc[(BMAP["Code domain name"].str.
                                             upper() == Code_domain_name)]
                        if len(BMAP_row.index) > 0:
                            Code_set_ID = str(
                                int(BMAP_row["Code set ID"].values[0]))
                            Code_domain_ID = str(
                                int(BMAP_row["Code domain ID"].values[0]))
                            bmap_left_join_count = bmap_left_join_count + 1
                            bmap_alias = " bm" + str(bmap_left_join_count)

                            bmap_query = "( Select " + bmap_alias + ".EDW_Code\n"
                            bmap_query = bmap_query + "\tFrom " + cf.UTLFW_v + "." + bmap_physical_table + bmap_alias + "\n"
                            bmap_query = bmap_query + "\tWhere " + bmap_alias + ".Source_Code = " + trimed_Natural_key + "\n"
                            bmap_query = bmap_query + "\tand " + bmap_alias + ".Code_Set_id = " + Code_set_ID + "\n"
                            bmap_query = bmap_query + "\tand " + bmap_alias + ".Domain_ID = " + Code_domain_ID + ")"

                            comma_Column_name = comma + bmap_query + " AS " + alias
                            bmap_columns = bmap_columns + comma_Column_name + "\n"

            modification_type = ",t.modification_type\n" if Loading_Type == "OFFLINE_CDC" else ""
            normal_columns = normal_columns + modification_type
            create_view_script = create_view + normal_columns + bkey_columns + bmap_columns + from_clause + ";\n"
            f.write(create_view_script + "\n")
    except:
        funcs.TemplateLogError(cf.output_path, source_output_path, file_name,
                               traceback.format_exc()).log_error()
    f.close()