from loguru import logger from ..config import QUERY_PATHS, WAREHOUSES from ..db import get_snw from ..db.queries import QueryLoader def run_full_refresh() -> None: logger.info("Starting weekly full refresh") snw = get_snw(WAREHOUSES["large"]) ql = QueryLoader() logger.info("Creating staging table") snw.execute(ql.load(QUERY_PATHS.staging_create_refresh)) rowcount_stage = snw.query(ql.load(QUERY_PATHS.staging_rowcount))["rowcount"][0] logger.info(f"{rowcount_stage} rows in staging table") logger.info("Truncating main table") snw.execute(ql.load(QUERY_PATHS.main_truncate)) rowcount_main = snw.query(ql.load(QUERY_PATHS.main_rowcount))["rowcount"][0] if rowcount_main != 0: logger.error(f"Truncation failed, {rowcount_main} rows remain — aborting") return logger.info("Inserting staging into main table") snw.execute(ql.load(QUERY_PATHS.main_insert)) logger.info("Updating last run timestamp") snw.execute(ql.load(QUERY_PATHS.run_update)) rowcount_main = snw.query(ql.load(QUERY_PATHS.main_rowcount))["rowcount"][0] logger.info(f"{rowcount_main} rows in main table") if rowcount_main != rowcount_stage: logger.error( f"Row count mismatch: expected {rowcount_stage}, got {rowcount_main}" ) else: logger.success("Full refresh completed successfully")