Hub documentation
DuckDB
DuckDB
DuckDB์ ์ธํ๋ก์ธ์ค SQL OLAP ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์
๋๋ค.
Hugging Face ๊ฒฝ๋ก(hf://)๋ฅผ ์ฌ์ฉํ์ฌ Hub์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค:

DuckDB CLI(Command Line Interface)๋ ๋จ์ผ ์คํ ํ์ผ์ด๋ฉฐ ์ข ์์ฑ์ด ์์ต๋๋ค. Python, C++, Go, Java, Rust ๋ฑ์ ํฌํจํ์ฌ DuckDB๋ฅผ ์คํํ๊ธฐ ์ํ ๋ค๋ฅธ API๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ clients ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ธ์.
์ค์น ์ธ๋ถ ์ฌํญ์ ์ค์น ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
hfCLI๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,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์ ๋ฐ์ดํฐ์
์ ์ ์ฅํฉ๋๋ค.
- 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;hfCLI ๋๋ DuckDB์์ ์ง์ ์ธ์ฆํ์ธ์:
CLI์์:
hf auth login
DuckDB์์:
CREATE SECRET (TYPE HUGGINGFACE, TOKEN 'hf_...');
- ์์ง ๋ฐ์ดํฐ์ ์ ์ฅ์๊ฐ ์์ผ๋ฉด ์์ฑํ์ธ์:
CLI์์:
hf repos create username/my-dataset --repo-type dataset --private
DuckDB์์:
FROM hf_create_repo('hf://datasets/username/my-dataset', private := true);
- โฆ
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