데이터 라이프 사이클 때문에 매일 90일 이전의 데이터를 특정 컬럼만 null로 업데이트 하는걸 구현했습니다
문제는 건수가 많아서 한번에 update해서 commit하는게 아니라
루프로 돌려서 1만건update하고 commit 하는걸 만드려는데 잘 안되네요 ㅠㅠㅠ
if updt_cnt > 10000: loop_count = updt_cnt // 10000 + 1 log.info(f"Number of times to loop: {loop_count}") for loop_count in range(loop_count): qry = """ BEGIN TRANSACTION; """ for loop_count in range(10000): updt_qry = row[3] conn['curs'].execute(updt_qry) qry += """ commit; """ conn['curs'].execute(qry) conn['conn'].commit() log.info(updt_qry)
update 커맨드에서 멈춰있어요 ㅠㅠ 어떻게 해야할까요 ㅠㅠㅠ
row[3]은 위에 update문 추출하는 쿼리 정의 한거에요
sql_updt_qrylist = """ SELECT CONCAT('update da.dlc_col_updt_mgt set updt_dttm=NOW() where db_name=''', db_name, ''' and table_name=''', table_name, '''') AS updt_dttm_qry, CONCAT('update da.dlc_col_updt_mgt a, (select count(*) as updt_cnt from ', db_name, '.', table_name, ' where ', updt_col, ' ', updt_purge, ')b set a.updt_cnt=b.updt_cnt where a.table_name=''', table_name, '''') AS updt_cnt_qry, updt_cnt, CONCAT('update ', db_name, '.', table_name, ' set ', GROUP_CONCAT(CONCAT(col_name, '=', updt_val) SEPARATOR ' ,'), ' where ', updt_col, ' ', updt_purge) AS updt_qry, CONCAT('update da.dlc_col_updt_mgt set rslt_dttm=NOW() where db_name=''', db_name, ''' and table_name=''', table_name, '''') AS rlst_dttm_qry FROM da.dlc_col_updt_mgt WHERE use_yn = 'Y' GROUP BY db_name, table_name, updt_val, updt_col, updt_cnt, updt_purge;
위 쿼리에서 4번쨰 컬럼이 update문 추출하는쿼리인데 그걸 수행하게하려는 거에요