SingleStoreDB Python 을 이용한 View 생성 배치 처리

Jongsoo Noh·2023년 1월 24일
0
post-thumbnail

이전 글에서는 SingleStoreDB 의 Procedural Language 인 MPSQL 을 이용해서 View 생성을 Batch 로 처리했습니다.

https://velog.io/@runway053/SingleStoreDB-MPSQL-View생성-배치처리

MPSQL 이 익숙치 않은 분들을 위해서 Python 코드를 이용해서 동일한 작업을 수행하도록 하겠습니다.
먼저 Python3 에 singlestoredb 라이브러리를 설치합니다.
MySQL 에 호환되는 다른 라이브러리를 사용하셔도 됩니다. 지원가능한 라이브러리는 다음을 참조하세요.

https://docs.singlestore.com/db/v8.0/en/developer-resources/connect-with-application-development-tools/connect-with-python/supported-python-libraries.html

$ pip3 install singlestoredb

singlestoredb 를 import 하고 3306 포트 및 test database 를 지정하여 접속합니다.
이 때 Query 결과를 Dictionary 로 받아오게 results_type 을 'dict' 로 선택하여 컬럼명을 key 로 사용하도록 합니다.
Default 는 'list' 형식이므로 컬럼명 대신 리스트 인덱스를 사용하여 결과 컬럼을 구분해야 합니다.

import singlestoredb as s2
conn = s2.connect('user:pw@x.x.x.x:3306/test', results_type='dict')
conn.autocommit(True)

create_view 함수는 MPSQL 과 동일한 Logic 을 가지고 있습니다.
clist 테이블에서 view 의 컬럼으로 사용할 alias 를 조회하여 sel_list 변수에 저장 한 후
create view 명령어에서 각각 tname, vname, sel_list 를 조합하여 DDL 을 수행합니다.

def create_view(tname, vname):
    cur.execute("SELECT GROUP_CONCAT(CONCAT_WS(' as ', CONCAT('var',orgcol), newcol) ORDER BY orgcol:>int) as cols " +
                "FROM clist WHERE tname = '" + tname + "' AND use_yn = 'y'")
    row = cur.fetchone()
    sel_list = row['cols']

    cur.execute('DROP VIEW IF EXISTS ' + vname)
    cur.execute('CREATE VIEW ' + vname + ' AS SELECT id, ' + sel_list + ' FROM ' + tname)

Main 로직은 connection 으로부터 Cursor 를 얻고 tlist 를 조회하여 결과로 나온 각각의 row 별로 create_view 함수를 실행합니다.

cur = conn.cursor()
cur.execute('SELECT * FROM tlist')
for row in cur.fetchall():
    create_view(row['tname'], row['vname'])

cur.execute('show tables extended')
for row in cur.fetchall():
    if row['Table_type'] == 'VIEW':
        print(row)

이상으로 Python 을 사용하여 SingleStoreDB 에 접속한 후 조회 및 DDL 수행을 Batch 처리하는 예제를 소개해 드렸습니다.

profile
Database Guy

0개의 댓글