티스토리 뷰
주피터랩에서 minio 기반의 s3 데이터의 엑셀파일을 연동할때, IPython 매직명령어 기반으로 %sql 형태로 표현해서 연동하려고 했는데 공식 문서를 확인해보면 SECRET 을 생성후 연결한다고 되어있는데, 문제는 minio 에서 연결하는 예제가 잘 안되어 있어서 실패가 났는데, minio 기반의 s3 를 접근하기위한 예제를 알려주고자 한다.
https://duckdb.org/docs/extensions/httpfs/s3api.html
해결방법
공식문서에 있는건 aws 기준이라 추가적인 파라미터가 없는 기본 선언만 예제로 있는데, minio 에서는 연결 정보를 추가로 넣어줘야 하는데 아래와 같이 secret 을 선언후 실행하면 된다. (물론 KEY_ID, SECRET 값은 자기가 만든걸로 맞춰야 한다)
추가정보의 경우 10.10.10.1:9000 이라면 아래와 같이 정의하면된다, http 와 같이 ssl 을 안쓴다면 USE_SSL 을 false 로 처리해야한다
CREATE SECRET secret1 (
TYPE S3,
KEY_ID 'AKIAIOSFODNN7EXAMPLE',
SECRET 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
REGION 'us-east-1',
-- 추가정보 --
ENDPOINT '10.10.10.1:9000',
URL_STYLE 'path',
USE_SSL 'false',
REGION 'us-east-1'
);
위와 같이 선언호 쿼리를 다음과 같은 형태로 날리면 바로 조회가 가능하다.
SELECT
*
FROM
st_read(
's3://버킷명/파일명'
)
LIMIT 10
;
추가 내용
주피터에서 %sql 과 같은 표현으로 쿼리를 날린것이라면 맨상단에 아래와 같이 선언한 셀이 있어야 쿼리를 사용할수 있다.
import duckdb
import pandas as pd
%load_ext sql
%config SqlMagic.autopandas = True
%config SqlMagic.feedback = False
%config SqlMagic.displaycon = False
%sql duckdb:///:memory:
# 엑셀파일 읽기위해서 https://duckdb.org/docs/guides/python/jupyter.html
%sql INSTALL spatial;
%sql LOAD spatial;
이렇게 선언하고, 다른 셀에 SECRET 과 SELECT 문을 넣고 실행하면 실행이 가능하다.
참고로 excel, csv 같은 파일을 duckdb 에서 활용할때는 아래 문서를 참고하면 된다. (st_read 를 사용하고자 할때)
https://duckdb.org/docs/guides/file_formats/excel_import.html
'데이터처리 > Duckdb' 카테고리의 다른 글
[DuckDB] csv 파일을 읽을때 헤더 있을때와 없을때 사용법 정리 (0) | 2024.12.26 |
---|---|
[DuckDB] hdfs 에 있는 csv 를 duckdb 로 분석하기 - jupyter (1) | 2024.12.25 |