티스토리 뷰

반응형

ipython 의 매직명령어 표현이 아닌 python 코드로 사용하는 방법이 필요한 경우를 알려주고자 한다.

참고로 %sql 표현으로 사용가능한 방법은 아래 링크에 정리해 두었다.

https://ngela.tistory.com/170

 

python 코드로 duckdb 에서 읽기

minio 기반의 s3 환경에 접근할때는 아래와 같이 ENTRYPOINT 변경이 필요하다. 

그 이외에는 특별히 다를게 없다, 아래와 같이 정보를 set 명령을 통해 선언하는게 가능하다.

# duckdb 와 연계하여 실행
import duckdb

# duckdb connection
conn = duckdb.connect()

# Set the necessary S3 configurations
conn.execute("SET s3_region = 'us-east-1';")
conn.execute("SET s3_url_style = 'path';")
conn.execute("SET s3_endpoint = '10.10.10.1:9000';")
conn.execute("SET s3_access_key_id = 'AKIAIOSFODNN7EXAMPLE';")
conn.execute("SET s3_secret_access_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY';")
conn.execute("SET s3_use_ssl = false;")

# Load the HTTPFS extension
conn.execute("INSTALL 'httpfs';")
conn.execute("LOAD 'httpfs';")

# https://duckdb.org/docs/data/csv/overview.html
conn.execute("""
CREATE TABLE t_sample AS 
SELECT * 
FROM read_csv(
    's3://버킷명/파일명', 
    delim = ',',
    header = true
);
""")

# 쿼리 실행
query = """
  SELECT 
    * 
  FROM 
    t_sample 
  WHERE
        CAST(clk_cnt AS BIGINT) > 0 
    AND CAST(imp_cnt AS BIGINT) > 0
  ORDER BY sales_amt desc  
  limit 10
"""
cursor = conn.execute(query)
result = cursor.fetchdf()


# 출력
display(result)

conn.close()

 

다양한 리턴타입을 지원하는 duckdb

샘플코드에서는 DataFrame 객체로 리턴하게 사용했는데, 사실 더 다양한 형태의 데이터 리턴을 지원한다.

fetchdf() 가 아닌 fetchnumpy() 도 지원하고, python 의 리스트 타입형태로 리턴하는 fetchall() 메소드도 존재한다.

그래서 필요한 데이터 타입으로 리턴받아 재가공하는것도 꽤 편하다.

 

https://duckdb.org/docs/api/python/conversion.html

 

Conversion between DuckDB and Python

This page documents the rules for converting Python objects to DuckDB and DuckDB results to Python. Object Conversion: Python Object to DuckDB This is a mapping of Python object types to DuckDB Logical Types: None → NULL bool → BOOLEAN datetime.timedel

duckdb.org

 

덤으로 duckdb 에서는 parquet 은 지원하는데 orc 포맷이 지원되지 않고, hdfs 도 기본지원안되는데 python 에서 pyarrow 와 연계하면 이런 문제도 쉽게 해결가능하다. 이 내용도 나중에 다루도록 하겠다. 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함