python pyodbc 에서 많은 row 들을 INSERT하고 UPDATE하는 방법이 뭘까요?

조회수 622회

pyspark 또는 python 에서 데이터베이스 상관 없이(이왕이면 mssql과 postgreSQL을 중심으로 알려주시면 좋겠습니다.) row마다 insert하거나 update하는 코딩을 해야합니다.

그런데 spark에서는 update를 지원하지 않아서 python 라이브러리로 동작시키는데 row별로 해당 pk값을 조회해서 없으면 INSERT, 있으면 UPDATE 시키는 걸 1줄씩하려니까 너무 오래걸리네요..혹시 효율적인 방법이 있을까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    mssql이면 MERGE문이 있기는 한데, 질문자님이 하고 계신 작업 특성상 자료 하나하나를 UPDATE 대상인지 체크하고 넘어가자면 그건 절대로 효율 안나올듯 합니다.

    보통은 INSERT 할땐 INSERT 만 하고 UPDATE 는 나중에 일괄로 처리합니다. INSERT 는 UPDATE 에 비해서 비용도 적고, 교착 상태가 발생할 가능성도 더 낮기 때문입니다.

    이걸 저보고 하라고 한다면...

    1. Redis 등의 별도 DB로 필터한다.
      • 현존하는 모든 pk 확보하여 redis 에 저장
      • INSERT 하려는 자료가 pk 기준으로 redis에 있는지 확인
      • 없으면 (DB 및 redis 에) INSERT, 있으면 업데이트할 내용을 redis 에 저장
      • 저장된 내용들 가지고 일괄 update
    2. pk가 겹치더라도 무조건 INSERT 를 받고, 중복건을 제거하는 쿼리를 나중에 한꺼번에 돌린다.
      • AUTO INCREMENT BIGINT 컬럼 하나로 PK를 대체
      • created_at 같은 컬럼을 추가 복합키로 설정
      • 중복건을 제거하는 그 쿼리가 뭐냐 하는 건 다른 문제 (created_at이 가장 큰 놈만 살리면 되는 것인지? 등등)

    둘중 하나로 갈 거 같네요.

    • 이런 방법도 있군요...감사합니다! 김재민 2021.2.1 16:34

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)