Beispiel #1
0
 def get_trgt_tb_crt_sql(self, trgt_tb_nm, trgt_db_cd="DPS", if_create_table=False):
     """
      根据源系统表结构生成目标系统的表结构语句,只适合简单的ods层同步表,不会获取索引、主键等信息
     :param if_create_table:  是否直接创建表
     :param trgt_tb_nm: 目标表表名 包含schema 例如dw.dim_date
     :param trgt_db_cd:
     :return:
     """
     tb_strct = self.get_tb_strct()
     # meta = tb_strct.copy()  # 源系统表结构 类型dataframe 'col_nm', 'col_type', 'col_len', 'col_prcn', 'col_cmnt'
     trgt_db_conn = Conn(trgt_db_cd)
     crt_tb_sql = crt_trgt_db_sql(tb_strct, trgt_tb_nm, trgt_db_cd=trgt_db_cd)
     if if_create_table:
         trgt_db_conn.upd_tb_strct(crt_tb_sql, schm_tb_nm=trgt_tb_nm, drop_direct=False)
     return crt_tb_sql  # {"tb_nm": trgt_tb_nm, 'crt_tb_sql': crt_tb_sql, 'meta': meta}
Beispiel #2
0
 def crt_tb_from_src_sys(self, src_tb_nm, src_db_cd, trgt_schm_nm='ods'):
     """
     数据同步时,源系统和目标表结构创建或者校验
     :param src_tb_nm:
     :param src_db_cd:
     :param trgt_schm_nm:
     :return:
     """
     trgt_tb_nm = self.tb_nm
     trgt_db_cd = self.conn.db_cd
     src_conn = Conn(src_db_cd)
     src_meta = src_conn.get_tb_strct(src_tb_nm)  # 获取表结构
     src_conn.close()
     if src_meta:
         if trgt_tb_nm is None:  # 如果没有设定目标表名,需要自动生成目标表名
             trgt_tb_nm = self.get_auto_el_tb_nm(schema=trgt_schm_nm)
         crt_tb_sql = crt_trgt_db_sql(src_meta, trgt_tb_nm, trgt_db_cd)
         trgt_conn = Conn(trgt_db_cd)
         rs = trgt_conn.upd_tb_strct(crt_tb_sql,
                                     schm_tb_nm=trgt_tb_nm,
                                     drop_direct=False)
         trgt_conn.close()
         return rs
     else:
         raise Exception("源数据库目标表表%s不存在" % src_tb_nm)
Beispiel #3
0
def deal():
    """
    处理入口
    """
    conn = Conn(default_db_cd)
    crt_el_log_tb(conn)
    try:
        # 校验表结构
        if conn.upd_tb_strct(crt_tb_sql=ddl_sql, schm_tb_nm=tb_nm, drop_direct=True):
            etl_meta_el(conn)
    finally:
        conn.close()
Beispiel #4
0
def deal():
    """
    处理入口
    :return:
    """
    conn = Conn('ibm')
    try:
        with conn:
            # 表结构校验
            if conn.upd_tb_strct(crt_tb_sql=ddl_sql, schm_tb_nm=tb_nm, drop_direct=proc_all_flag):
                # 产品分类
                dim_prod_cat(conn)
    finally:
        conn.close()
Beispiel #5
0
def src_tb_sync_ods(src_tb_nm,
                    src_db_cd,
                    trgt_tb_nm=None,
                    trgt_db_cd=default_db_cd,
                    trgt_schm_nm='ods',
                    if_el_data=True):
    """
    源系统和目标表结构创建或者校验
    :param if_el_data:  是否导入数据
    :param src_tb_nm:
    :param src_db_cd:
    :param trgt_tb_nm:
    :param trgt_db_cd:
    :param trgt_schm_nm:
    :return:
    """
    src_conn = Conn(src_db_cd)
    src_meta = src_conn.get_tb_strct(src_tb_nm)  # 获取表结构
    src_conn.close()
    if src_meta:
        if trgt_tb_nm is None:  # 如果没有设定目标表名,需要自动生成目标表名
            trgt_tb_nm = get_targt_tb_nm(src_meta['tb_nm'],
                                         src_meta['db_cd'],
                                         schema=trgt_schm_nm)
        crt_tb_sql = crt_trgt_db_sql(src_meta, trgt_tb_nm, trgt_db_cd)
        trgt_conn = Conn(trgt_db_cd)
        rs = trgt_conn.upd_tb_strct(crt_tb_sql,
                                    schm_tb_nm=trgt_tb_nm,
                                    drop_direct=False)
        trgt_conn.close()
        if if_el_data:
            datax(src_tb_nm,
                  src_db_cd,
                  trgt_tb_nm,
                  write_conn=trgt_db_cd,
                  check_tb_strct=False,
                  logs_print=False)
        return rs
    else:
        raise Exception("源数据库目标表表%s不存在" % src_tb_nm)
Beispiel #6
0
def to_check_tb_strct(src_tb_nm=None,
                      src_db_cd=None,
                      trgt_tb_nm=None,
                      trgt_db_cd="DPS",
                      if_ddl_not_exists="raise"):
    """
    校验表结构
    :param if_ddl_not_exists:
    :param src_tb_nm:
    :param src_db_cd:
    :param trgt_tb_nm:
    :param trgt_db_cd:
    :return:
    """
    sql = get_sql(trgt_tb_nm, sql_type='ddl')  # 获取表结构的sql文件
    if sql:  # 存在sql文件时,以sql文件为主
        if isinstance(trgt_db_cd, str):
            conn = Conn(trgt_db_cd)  # get_conn(trgt_db_cd)
        else:
            conn = trgt_db_cd
        check_rs = conn.upd_tb_strct(sql, trgt_tb_nm)
        if check_rs is False:
            raise Exception("表结构校验不通过,请查看上面的错误明细")
    elif src_tb_nm and src_db_cd:
        err_msg = "根目录下的sql/ddl/" + trgt_tb_nm.replace(
            ".", "/") + ".sql文件不存在,从源系统拉取表结构校验"
        logger.warning(err_msg)
        src_tb_sync_ods(src_tb_nm,
                        src_db_cd,
                        trgt_tb_nm,
                        trgt_db_cd,
                        if_el_data=False)  # 校验表结构并修改
    else:
        err_msg = "根目录下的sql/ddl/" + trgt_tb_nm.replace(".",
                                                       "/") + ".sql 文件不存在,无法校验"
        logger.warning(err_msg)
        if if_ddl_not_exists == "raise":
            # send_error_msg(err_msg, trgt_tb_nm)
            raise Exception(err_msg)