HTTP(S) 지원

HTTP(S) 지원 (HTTP(S) Support)

httpfs 익스텐션을 쓰면 HTTP(S) 프로토콜로 파일을 직접 쿼리할 수 있어요. DuckDB 또는 그 여러 익스텐션이 지원하는 모든 파일에 대해 동작하고, 읽기 전용 접근을 제공해요. URL만 넣으면 바로 읽어지는 셈이죠.

출처: 문서

본문

httpfs 익스텐션으로 HTTP(S) 프로토콜을 통해 파일을 직접 쿼리할 수 있어요. 이는 DuckDB 또는 그 여러 익스텐션이 지원하는 모든 파일에 대해 동작하며, 읽기 전용 접근을 제공해요.

SELECT *
FROM 'https://domain.tld/file.extension';

부분 읽기 (Partial Reading)

CSV 파일의 경우 형식이 행 기반이라 대부분의 경우 파일 전체가 다운로드돼요. Parquet 파일의 경우 DuckDB는 부분 읽기를 지원해요 — 즉 Parquet 메타데이터와 HTTP 범위 요청(range requests)을 조합해 쿼리에 실제로 필요한 파일 부분만 다운로드할 수 있어요. 예를 들어 다음 쿼리는 Parquet 메타데이터와 column_a 컬럼의 데이터만 읽어요:

SELECT column_a
FROM 'https://domain.tld/file.parquet';

어떤 경우에는 메타데이터만 읽으면 돼서 실제 데이터는 전혀 읽을 필요가 없어요:

SELECT count(*)
FROM 'https://domain.tld/file.parquet';

여러 파일 스캔하기 (Scanning Multiple Files)

HTTP(S)로 여러 파일을 스캔하는 것도 지원돼요:

SELECT *
FROM read_parquet([
    'https://domain.tld/file1.parquet',
    'https://domain.tld/file2.parquet'
]);

인증 (Authenticating)

HTTP(S) 엔드포인트에 인증하려면 Secrets Manager를 사용해 HTTP 시크릿을 만들어요:

CREATE SECRET http_auth (
    TYPE http,
    BEARER_TOKEN '⟨token⟩'
);

또는:

CREATE SECRET http_auth (
    TYPE http,
    EXTRA_HTTP_HEADERS MAP {
        'Authorization': 'Bearer ⟨token⟩'
    }
);

HTTP 프록시 (HTTP Proxy)

DuckDB는 HTTP 프록시를 지원해요.

Secrets Manager를 사용해 HTTP 프록시를 추가할 수 있어요:

CREATE SECRET http_proxy (
    TYPE http,
    HTTP_PROXY '⟨http_proxy_url⟩',
    HTTP_PROXY_USERNAME '⟨username⟩',
    HTTP_PROXY_PASSWORD '⟨password⟩'
);

SCOPE 키워드로 HTTP 프록시의 범위를 설정할 수도 있어요.

CREATE SECRET http_proxy (
    TYPE HTTP, 
    SCOPE ['⟨https://duckdb.org⟩', '⟨https://some-other-website.org⟩'], 
    HTTP_PROXY '⟨http_proxy_url⟩',
    HTTP_PROXY_USERNAME '⟨username⟩',
    HTTP_PROXY_PASSWORD '⟨password⟩'
);

또는 설정 옵션으로 추가할 수 있어요:

SET http_proxy = '⟨http_proxy_url⟩';
SET http_proxy_username = '⟨username⟩';
SET http_proxy_password = '⟨password⟩';

참고: 설정 옵션으로는 프록시 범위를 설정할 수 없어요.

커스텀 인증서 파일 사용하기 (Using a Custom Certificate File)

커스텀 인증서 파일과 함께 httpfs 익스텐션을 사용하려면 익스텐션을 로드하기 전에 다음 설정 옵션을 설정해요:

LOAD httpfs;
SET ca_cert_file = '⟨certificate_file⟩';
SET enable_server_cert_verification = true;

HTTP 시크릿을 사용해 모든 HTTP 요청에 대해 SSL 검증을 비활성화하고 싶다면 다음 문으로 할 수 있어요:

CREATE SECRET disable_ssl (
    TYPE HTTP, 
    VERIFY_SSL 0
);

특정 엔드포인트에 대해서만 다시 활성화하려면 scope 파라미터를 활용할 수 있어요:

CREATE SECRET enable_ssl_for_your_website (
    TYPE HTTP, 
    SCOPE 'https://⟨your-website.com⟩', 
    VERIFY_SSL 1
); 

더 알아보기 (Learn more)