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)
- Secrets Manager — 인증·범위 관리.
- httpfs 개요 — 원격 파일 접근 전반.