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)
- httpfs 익스텐션 — HTTP(S) 원격 파일 접근 전반.
- CSV 가져오기 — CSV 읽기 옵션.