27 lines
1.6 KiB
Python
27 lines
1.6 KiB
Python
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()
|
|
|