示例#1
0
def main(batchfile, dryrun=False, log=False):
    def _parse_query(sql, parameterfile):
        with open(parameterfile) as pf:
            paramdict = json.load(pf)
        parsed_sql = sql.format(**paramdict)

        return parsed_sql

    def _parse_batchfile(batchfile):
        with open(batchfile, 'r') as bf:
            batchdict = json.load(bf)
            defaultsetting = batchdict["DefaultSetting"]
            executes = batchdict["Execute"]

        return defaultsetting, executes

    def _get_targetdbinfo(dbinfofile, dbinfo):
        with open(dbinfofile, "r") as di:
            dbs = yaml.safe_load(di)
        dbdict = dbs[dbinfo]

        return dbdict

    def _get_query_from_file(sqlfile):
        with open(sqlfile, 'r') as sqlf:
            query = sqlf.read()

        return query

    def _overwritesetting(defaultsetting, execute):
        defalultkeys = defaultsetting.keys()
        for dkey in defalultkeys:
            if dkey not in execute.keys():
                execute[dkey] = defaultsetting[dkey]

        return execute

    if log:
        if not os.path.exists(logpath):
            os.makedirs(logpath)

        now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        logname = logpath + 'qe_' + now + '.log'
        loggerfh = logging.FileHandler(logname)
        loggerfh.setLevel(logging.INFO)
        loggerfh.setFormatter(logging.Formatter(formatter))
        logger.addHandler(loggerfh)
        logger.info('Logfile Name : %s', logname)

    logger.info('LOGGINIG : %s', log)
    logger.info('BATCH FILE : %s', batchfile)
    logger.info('DRYRUNMODE : %s', dryrun)

    defautsetting, executes = _parse_batchfile(batchfile)

    for step, execute in executes.items():
        logger.info('QUERYSTEP : %i', int(step))
        setting = _overwritesetting(defautsetting, execute)
        dbinfofile = setting["DatabaseInfoFile"]
        engine = setting["QueryEngine"]
        dbinfo = setting["DatabaseInfo"]
        sqlfile = setting["SQLFile"]

        logger.info('DBinfofile : %s', dbinfofile)
        logger.info('Engine : %s', engine)
        logger.info('DBInfo : %s', dbinfo)
        logger.info('SQLFile : %s', sqlfile)

        parameter = setting["Parameter"] if "Parameter" in setting.keys(
        ) else None
        option = setting["Option"] if "Option" in setting.keys() else None

        logger.info('ParameterFile : %s', parameter)
        logger.info('Option : %s', option)

        targetdbdict = _get_targetdbinfo(dbinfofile, dbinfo)

        qe = QueryEngine(engine, targetdbdict)

        query = _get_query_from_file(sqlfile)

        if parameter != None:
            query = _parse_query(query, parameter)

        logger.info('Execute Query')
        logger.info('\n' + query)

        # Skip connection & execute if dryrun mode.
        if dryrun:
            continue

        try:
            qe.connect()
        except Exception as e:
            logger.error(e)
            break

        try:
            result = qe.execute(query)
        except Exception as e:
            logger.error(e)
            break

        logger.info('RESULT : %s', result)

    logger.info("END")