pandas에서 DataFrame을 DB로 insert 시키고 싶을때 여러가지 방법이 있다.
원래는 파일형식의 hive DB를 사용하다가 ICEBERG로 옮기게 되었는데, ICEBERG에서는 MinIO로 parquet를 밀어넣는 방식을 사용하지 않는다. 귀찮..
그래서 속도가 좀 느려지지만 to_sql 방식을 사용해서 Pandas DataFrame을 그대로 insert 해보았다.
1. [SQL] ICEBERG DB로 테이블을 생성
CREATE TABLE ICEBERG.schema.table (
ANL_DT VARCHAR(10),
a VARCHAR(9),
b VARCHAR(18),
c VARCHAR(100),
create_date date
)
WITH (
format = 'parquet',
location = 's3a://bucket/iceberg/schema/DM_PMI_MDL_OUT'
)
;
2. [Python] DB Connect / engine 만들기
import sqlalchemy
def conn():
return connect(
user="...",
http_scheme="https",
auth=BasicAuthentication("///", "///"),
host="...",
port= ... ,
catalog= "iceberg",
schema= "..."
)
engine = sqlalchemy.create_engine('trino://', creator=conn)
trino를 사용하였기 때문에 .create_engine url 부분에 trino://를 사용하였다.
3. [Python] to_sql 매서드 적용
df.to_sql('table', con=engine, schema = 'schema',if_exists='append',chunksize = 5000, method = 'multi', index = False)
chunksize를 적절히 설정하고 method를 multi로 설정한다.
1) chuksize : 각 배치때마다 한번에 written 할 row 수, 설정 안할 경우 한번에 하나씩 written됨
2) method
① multi: mutilple하게 insert
② None: 설정 안할령우 한번에 하나씩 insert
+ ) 속도 튜닝은 아직 안해봐서 좀 느린듯 함