vertica-python 소개
Updated:
vertica-python
vertica-python는 Uber에서 개발하여 open source로 공개한 vertica를 위한 native python client 이다.
vertica-python 현재 Python 2.7/3.4/3.5/3.6/3.7/3.8 에서 테스트 완료 되었으며, 최신 버전 및 상세 정보는 https://github.com/vertica/vertica-python 에서 확인 할 수 있다.
vertica-python 설치
online 환경의 경우 아래와 같이 수행하면 설치가 완료 된다.(python 3.4 이후 버전부터 가능)
pip install vertica-python
vertica_python을 직접 다운 받아서 진행 할 경우에는 https://github.com/vertica/vertica-python 에서 소스를 다운 받아 압축 해제후 root 경로에서 아래와 같이 수행 하면 설치가 완료 된다.
python setup.py install
vertica-python vertica connection
import vertica_python
conn_info = {'host': '127.0.0.1', #버티카 접속 host ip
'port': 5433, #버티카 접속 port
'user': 'dbadmin', #버티카 접속 user
'password': 'password', #버티카 접속 user password
'database': 'test_db', #버티카 접속 database name
'session_label': 'some_label', #session label
#'connection_load_balance': True
#'backup_server_node': ['1.1.1.2','1.1.1.3','1.1.1.4']
'log_level': logging.INFO, #log level
'log_path': '/home/admin/logs/vClient.log' #log file path
'unicode_error': 'strict', #UTF-8이 아닌 문자열이 있는 경우 처리하는 방법(strict, replace, ignore)
'ssl': False, #SSL connection 옵션
'use_prepared_statements': False, #False(쿼리 실행을 한번에 여러개 수행 가능) True(prepared statement를 이용한 쿼리 수행)
'connection_timeout': 5}
# 명시적으로 close() 함수를 호출해야함.
connection = vertica_python.connect(**conn_info)
# 로직
connection.close()
# with 문이 완료 되면 자동으로 close() 함수가 호출됨.
with vertica_python.connect(**conn_info) as connection:
# 로직
vertica-python select
import vertica_python
conn_info = {'host': '127.0.0.1',
'port': 5433,
'user': 'dbadmin',
'password': 'password',
'database': 'test_db'}
connection = vertica_python.connect(**conn_info)
cur = connection.cursor()
#한 row씩 가져오기
cur.execute("select * from tables limit 2")
for row in cur.iterate():
print(row)
#전체 row 한번에 가져오기(list type)
cur.execute("select * from tables limit 2")
print cur.fetchall()
#전체 row 한번에 가져오기(dictionary type)
cur = connection.cursor('dist')
cur.execute("select * from tables limit 2")
print cur.fetchall()
connection.close()
vertica-python insert
import vertica_python
conn_info = {'host': '127.0.0.1',
'port': 5433,
'user': 'dbadmin',
'password': 'password',
'database': 'test_db',
'use_prepared_statements': True} #True(prepared statement를 이용한 쿼리 수행)
connection = vertica_python.connect(**conn_info)
cur = connection.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS tbl (a INT, b VARCHAR(10))")
cur.execute("INSERT INTO tbl VALUES (?, ?); ", [1, 'aa'])
cur.execute("INSERT INTO tbl VALUES (?, ?); ", [2, 'bb'])
cur.execute("COMMIT;")
cur.execute("SELECT * FROM tbl;")
print cur.fetchall()
connection.close()
vertica-python copy
import vertica_python
conn_info = {'host': '127.0.0.1',
'port': 5433,
'user': 'dbadmin',
'password': 'password',
'database': 'test_db',
'disable_copy_local': False, #copy local을 사용
'use_prepared_statements': True} #True(prepared statement를 이용한 쿼리 수행)
connection = vertica_python.connect(**conn_info)
cur = connection.cursor()
cur.execute("create table if not exists tbl2(col1 int, col2 varchar(10));")
#적재할 파일이 vertica cluster에 존재 하는 경우
cur.execute("copy tbl2 from "
" '/tmp/vertica_data.sam' delimiter '|'"
" rejected data '/tmp/vertica_data.rej'"
" exceptions '/tmp/vertica_data.exp'"
, buffer_size=65536
)
print("Rows loaded:", cur.fetchone()[0])
#적재할 파일이 client에 존재 하는 경우
cur.execute("copy tbl2 from local"
" '/tmp/local_data.sam' delimiter '|'"
" rejected data '/tmp/local_data.rej'"
" exceptions '/tmp/local_data.exp'"
, buffer_size=65536
)
print("Rows loaded:", cur.fetchone()[0])
connection.close()
vertica-python 변수 처리
쿼리에 변수를 사용하는 경우 :변수명 으로 쿼리에서 사용하면된다.
import vertica_python
conn_info = {'host': '127.0.0.1',
'port': 5433,
'user': 'dbadmin',
'password': 'password',
'database': 'test_db'}
connection = vertica_python.connect(**conn_info)
cur = connection.cursor()
#파라미터 값 설정
parameters = {'p_t_schema': 'public', 'p_t_name': 'tbl'}
#쿼리 실행
cur.execute("select * from tables where table_schema = :p_t_schema and table_name = :p_t_name", parameters)
print(cur.fetchall())
connection.close()
vertica-python insert/update/delete/copy 결과 건수 확인
cur.execute()를 호출한 후 cur.fetchone()[0]를 통해 처리 건수를 확인 할 수 있다.
cur.execute("insert/update/delete/copy등을 수행")
cur.fetchone()[0] #처리된 건수
vertica-python 상세한 사용법
vertica-python의 상세한 사용법은 vertica github의 vertica-python을 참고 하면 된다. https://github.com/vertica/vertica-python