Hub documentation

DuckDB

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DuckDB

DuckDB์€ ์ธํ”„๋กœ์„ธ์Šค SQL OLAP ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. Hugging Face ๊ฒฝ๋กœ(hf://)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Hub์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

DuckDB CLI(Command Line Interface)๋Š” ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ์ด๋ฉฐ ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. Python, C++, Go, Java, Rust ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ DuckDB๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ API๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ clients ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜์„ธ์š”.

์„ค์น˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์„ค์น˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

hf CLI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, hf datasets sql์„ ํ†ตํ•ด DuckDB ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด hf datasets sql "FROM 'hf://datasets/ibm/duorc/ParaphraseRC/*.parquet' LIMIT 3"์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ์…‹ ๋ฐ ๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•œ ์ธ์ฆ์€ ๋กœ๊ทธ์ธํ•œ ํ† ํฐ์—์„œ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, --format json์€ ๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

v0.10.3 ๋ฒ„์ „๋ถ€ํ„ฐ DuckDB CLI๋Š” hf:// ์Šคํ‚ด์„ ๊ฐ€์ง„ URL์„ ํ†ตํ•ด Hugging Face Hub์˜ ๋ฐ์ดํ„ฐ์…‹์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹๊ณผ ์‚ฌ์šฉ์ž ์†Œ์œ ์˜ ๊ฒŒ์ดํŠธ๋“œ ๋ฐ ๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์„ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค
  • ๋ฐ์ดํ„ฐ์…‹์„ ๋ถ„์„ํ•˜๊ณ  SQL ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค
  • datasets๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
  • ์ž„๋ฒ ๋”ฉ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋ฒกํ„ฐ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰ ์ˆ˜ํ–‰
  • ๋ฐ์ดํ„ฐ์…‹์— ์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ๊ตฌํ˜„

DuckDB ๊ธฐ๋Šฅ์˜ ์ „์ฒด ๋ชฉ๋ก์€ DuckDB ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

CLI๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์„ค์น˜ ํด๋”์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”:

./duckdb

Hugging Face URL ์ƒ์„ฑ

Hugging Face ๋ฐ์ดํ„ฐ์…‹์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋‹ค์Œ URL ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

hf://datasets/{my-username}/{my-dataset}/{path_to_file} 
  • my-username, ๋ฐ์ดํ„ฐ์…‹์˜ ์‚ฌ์šฉ์ž ๋˜๋Š” ์กฐ์ง, ์˜ˆ: ibm
  • ๋ฐ์ดํ„ฐ์…‹ ์ด๋ฆ„, ์˜ˆ: my-dataset, duorc
  • path_to_parquet_file, the parquet file path which supports glob patterns, e.g. **/*.parquet, to query all parquet files

refs/convert/parquet ๋ฆฌ๋น„์ „์— ํ•ด๋‹นํ•˜๋Š” @~parquet ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ ๋ณ€ํ™˜๋œ Parquet ํŒŒ์ผ์„ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://huggingface.co/docs/datasets-server/en/parquet#conversion-to-parquet์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ์…‹์˜ refs/convert/parquet ๋ฆฌ๋น„์ „์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

hf://datasets/{my-username}/{my-dataset}@~parquet/{path_to_file} 

์œ„ ๋ฌธ๋ฒ•์„ ๋”ฐ๋ฅด๋Š” ์ƒ˜ํ”Œ URL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

hf://datasets/ibm/duorc@~parquet/ParaphraseRC/test/0000.parquet

๋ฐ์ดํ„ฐ์…‹ ์ฟผ๋ฆฌ

๋ฐ์ดํ„ฐ์…‹์˜ ๋ชจ๋“  ํ–‰์„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ๋ชจ๋กœ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

FROM 'hf://datasets/ibm/duorc/ParaphraseRC/*.parquet' LIMIT 3;

๋˜๋Š” ์ „ํ†ต์ ์ธ SQL ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ:

SELECT * FROM 'hf://datasets/ibm/duorc/ParaphraseRC/*.parquet' LIMIT 3;

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” Hugging Face ๋ฐ์ดํ„ฐ์…‹์—์„œ DuckDB๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋ณต์žกํ•œ ์—ฐ์‚ฐ๋“ค์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Storage Buckets ์ฟผ๋ฆฌ: DuckDB 2.0 ์ด์ƒ์€ CLI์™€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—์„œ Storage Buckets๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

SELECT * FROM 'hf://buckets/username/my-bucket/data.parquet' LIMIT 10;

Buckets์—๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ @revision ๊ตฌ๋ฌธ์€ bucket ๊ฒฝ๋กœ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. DuckDB 1.x์—์„œ๋Š” ๋Œ€์‹  Python์—์„œ Hugging Face ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋“ฑ๋กํ•˜์„ธ์š”: duckdb.register_filesystem(HfFileSystem()). ์ž์„ธํ•œ ๋‚ด์šฉ์€ DuckDB๋กœ ์ฟผ๋ฆฌํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ์…‹ ์ €์žฅ

COPY ... TO ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ Hugging Face์— ๋ฐ์ดํ„ฐ์…‹์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  1. DuckDB >=2.0์šฉ extension์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:
SET allow_extension_repositories = 'allowed';
CREATE OR REPLACE EXTENSION REPOSITORY hf_repo
  WITH PREFIX 'https://hf.co/buckets/duckdb-extensions/builds/resolve';
INSTALL hf FROM hf_repo;
LOAD hf FROM hf_repo;
  1. hf CLI ๋˜๋Š” DuckDB์—์„œ ์ง์ ‘ ์ธ์ฆํ•˜์„ธ์š”:
  • CLI์—์„œ:

    hf auth login
  • DuckDB์—์„œ:

    CREATE SECRET (TYPE HUGGINGFACE, TOKEN 'hf_...');
  1. ์•„์ง ๋ฐ์ดํ„ฐ์…‹ ์ €์žฅ์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑํ•˜์„ธ์š”:
  • CLI์—์„œ:

    hf repos create username/my-dataset --repo-type dataset --private
  • DuckDB์—์„œ:

    FROM hf_create_repo('hf://datasets/username/my-dataset', private := true);
  1. โ€ฆ
COPY tbl TO 'hf://datasets/username/my-dataset/out.parquet';

PARTITION_BY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒํ‹ฐ์…˜ ํ‚ค ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค: COPY tbl TO 'hf://datasets/username/my-dataset/out-directory' (FORMAT parquet, PARTITION_BY (year, month));. ํŒŒํ‹ฐ์…˜ ํ‚ค ๊ฐ’์— ๋”ฐ๋ผ ํŒŒ์ผ์ด ์˜ฌ๋ฐ”๋ฅธ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'hf://datasets/username/my-dataset/out-directory/year=2026/month=1/data_1.parquet'์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์…‹์€ git ์ €์žฅ์†Œ์ด๋ฏ€๋กœ, ๋ชจ๋“  ์ƒˆ ํŒŒ์ผ์€ ๋ฐ์ดํ„ฐ์…‹ ํžˆ์Šคํ† ๋ฆฌ์˜ ์ปค๋ฐ‹์ž…๋‹ˆ๋‹ค.

Update on GitHub