import os, psycopg2 from etl_billiards.tasks.dwd_load_task import DwdLoadTask dwd_table="billiards_dwd.dwd_table_fee_log" ods_table="billiards_ods.table_fee_transactions" conn=psycopg2.connect(os.environ["PG_DSN"]) cur=conn.cursor() task=DwdLoadTask(config={}, db_connection=None, api_client=None, logger=None) cur.execute("SELECT column_name FROM information_schema.columns WHERE table_schema=%s AND table_name=%s", ("billiards_dwd", "dwd_table_fee_log")) dwd_cols=[r[0].lower() for r in cur.fetchall()] cur.execute("SELECT column_name FROM information_schema.columns WHERE table_schema=%s AND table_name=%s", ("billiards_ods", "table_fee_transactions")) ods_cols=[r[0].lower() for r in cur.fetchall()] cur.execute("SELECT column_name,data_type FROM information_schema.columns WHERE table_schema=%s AND table_name=%s", ("billiards_dwd", "dwd_table_fee_log")) dwd_types={r[0].lower(): r[1].lower() for r in cur.fetchall()} cur.execute("SELECT column_name,data_type FROM information_schema.columns WHERE table_schema=%s AND table_name=%s", ("billiards_ods", "table_fee_transactions")) ods_types={r[0].lower(): r[1].lower() for r in cur.fetchall()} mapping=task.FACT_MAPPINGS.get(dwd_table) insert_cols=[d for d,o,_ in mapping if o in ods_cols] select_exprs=[task._cast_expr(o,cast_type) for d,o,cast_type in mapping if o in ods_cols] sql=f"INSERT INTO {task._format_table(dwd_table,'billiards_dwd')} ({', '.join(f'\"{c}\"' for c in insert_cols)}) SELECT {', '.join(select_exprs)} FROM {task._format_table(ods_table,'billiards_ods')} LIMIT 1" print(sql) cur.execute(sql) conn.commit() print('ok') cur.close(); conn.close()