티스토리 뷰
반응형
duckdb 에서는 Parquet 은 지원하는데, orc 는 지원하지 않는다. 그리고 이슈를 찾아보면 별로 지원할 생각도 없는거 같다.
그래서 cli 툴로는 접근하는 제한이 있는데, apache arrow 를 경유하면 다양한 포맷을 읽는것이 가능하다.
여기서는 pyarrow 를 이용해서 접근하는 예제를 알려주도록 하겠다.
당연하지만, pip install pyarrow 가 선행되어야 한다.
해결방법
다음과 같이 pyarrow.orc 를 이용해서 orc 파일을 읽어내는게 가능하다.
아래 예제는 hdfs://my/user/user/export/sample/* 파일이 orc 포맷으로 저장되어있을때 읽는 예제이다.
hadoop 에 저장된 orc 파일을 읽어내는 샘플코드를 정리했다.
import pyarrow as pa
import pyarrow.fs as fs
import pyarrow.orc as orc
import duckdb
hdfs = fs.HadoopFileSystem(host='hdfs://my', user='user', kerb_ticket='/tmp/cc_hadoop')
base_path = "/user/user/export/sample"
file_list = [f.path for f in hdfs.get_file_info(pa.fs.FileSelector(base_path))]
tables = []
for file_path in file_list:
with hdfs.open_input_file(file_path) as file:
table = orc.ORCFile(file).read()
if table.num_rows > 0: # 빈 테이블은 건너뛰기
tables.append(table)
conn = duckdb.connect()
final_table = pa.concat_tables(tables)
conn.register('final_table', final_table)
query = """
SELECT
*
FROM
final_table
LIMIT 10;
"""
cursor = conn.execute(query)
# 필드명 출력
fields = [desc[0] for desc in cursor.description]
print(fields)
# Jupyter에서 테이블 출력
df = cursor.fetchdf()
display(df)
chatGPT 에서 답변을 주기는하는데, 이런 종합적인 내용은 이상하게 함정이 많은데 이건 내가 삽질해서 실제 돌아간 코드를 만들었으니 도움이 되길 바란다.
반응형
'데이터처리 > Duckdb' 카테고리의 다른 글
[DuckDB] csv 파일을 읽을때 헤더 있을때와 없을때 사용법 정리 (0) | 2024.12.26 |
---|---|
[DuckDB] hdfs 에 있는 csv 를 duckdb 로 분석하기 - jupyter (1) | 2024.12.25 |
[DuckDB] minio 기반의 s3 에 업로드된 엑셀파일 연동방법 : %sql 표현 (1) | 2024.12.20 |
댓글