HTTP CSV 가져오기

HTTP CSV 가져오기 (HTTP CSV Import)

HTTP(S)로 CSV 파일을 바로 로드하려면 httpfs 익스텐션이 필요해요. 이 익스텐션은 INSTALL SQL 명령으로 설치할 수 있고, 딱 한 번만 실행하면 돼요. 로컬 파일처럼 원격 CSV를 쿼리해 볼까요?

출처: 문서

본문

HTTP(S)를 통해 CSV 파일을 직접 로드하려면 httpfs 익스텐션이 필요해요. 이것은 INSTALL SQL 명령으로 설치할 수 있어요. 딱 한 번만 실행하면 돼요.

INSTALL httpfs;

httpfs 익스텐션을 사용하기 위해 로드하려면 LOAD SQL 명령을 사용해요:

LOAD httpfs;

httpfs 익스텐션이 설정되면 CSV 파일은 로컬 파일과 같은 방식으로 http(s)를 통해 읽을 수 있어요. read_csv(구버전 DuckDB에서는 read_csv_auto)를 사용하면 돼요:

SELECT * FROM read_csv('https://⟨domain⟩/path/to/file.csv');

또한 DuckDB의 리플레이스먼트 스캔 메커니즘 덕분에 read_csv 함수 자체도 생략할 수 있어요:

SELECT * FROM 'https://⟨domain⟩/path/to/file.csv';

예시 (Example)

다음 쿼리는 오픈 라이선스(CC BY 4.0)의 실제 CSV를 GitHub의 raw 파일 호스트에서 직접 읽어 로컬 다운로드 단계 없이 집계해요:

SELECT
    area,
    round(avg(sunbed_price), 0) AS avg_sunbed_price_eur,
    count(*) AS clubs
    FROM 'http://blobs.duckdb.org/data/beach-clubs.csv'
WHERE sunbed_price IS NOT NULL
GROUP BY area
ORDER BY avg_sunbed_price_eur DESC;
┌────────────────────────────┬──────────────────────┬───────┐
│            area            │ avg_sunbed_price_eur │ clubs │
│          varchar           │        double        │ int64 │
├────────────────────────────┼──────────────────────┼───────┤
│ Marbella centre (El Cable) │                120.0 │     1 │
│ Puerto Banús               │                103.0 │     4 │
│ Golden Mile                │                 70.0 │     1 │
│ El Rosario (Marbella East) │                 30.0 │     1 │
│ Elviria (Marbella East)    │                 30.0 │     1 │
│ Marbella centre            │                 20.0 │     1 │
│ Casablanca (Golden Mile)   │                 15.0 │     1 │
└────────────────────────────┴──────────────────────┴───────┘

read_csv는 파일을 먼저 구체화(materialize)하지 않고 스트리밍하므로, 메모리에 담기에는 너무 큰 CSV에도 동일하게 작동해요. 그리고 명시적 스키마 힌트가 필요한 파일에는 read_csv의 일반적인 옵션(columns, types, delim 등)과 자연스럽게 어울러져요.

더 알아보기 (Learn more)