티스토리 뷰

반응형

주피터랩에서 minio 기반의 s3 데이터의 엑셀파일을 연동할때, IPython 매직명령어 기반으로 %sql 형태로 표현해서 연동하려고 했는데 공식 문서를 확인해보면 SECRET 을 생성후 연결한다고 되어있는데, 문제는 minio 에서 연결하는 예제가 잘 안되어 있어서 실패가 났는데, minio 기반의 s3 를 접근하기위한 예제를 알려주고자 한다.

 

 

https://duckdb.org/docs/extensions/httpfs/s3api.html

 

S3 API Support

The httpfs extension supports reading/writing/globbing files on object storage servers using the S3 API. S3 offers a standard API to read and write to remote files (while regular http servers, predating S3, do not offer a common write API). DuckDB conforms

duckdb.org

 

해결방법

공식문서에 있는건 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

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함