[DuckDB] ์์
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ ์ ๋๋ง ๋ค๋ค๋ณธ๋ค.
duckdb๋ sqlite์ ๋ง์ ๋ถ๋ถ์์ ๋ฎ์๋ค.
RDB๋ค์ฒ๋ผ ์ค์ DB ์๋ฒ๋ฅผ ๋์์ ์ฐ๋ ๊ตฌ์กฐ๊ฐ ์๋๋ผ, ํ์ํ ๋๋ง ์คํํด์ ์ฐ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
๊ทธ๋์ ๊ทธ๋ฅ CLI๋ก ์คํํด์ ๊ฐ๋ณ๊ฒ ์ธ ์๋ ์๊ณ , ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์ค์์ importํด ์ฌ์ฉํ ์๋ ์๋ค.
์ฌ๊ธฐ์๋ ์ธ์ด์ ๋
๋ฆฝ์ ์ด๊ณ ๊ฐ๋จํ CLI ์ฌ์ฉ๋ฒ ์ ๋๋ง ๋ค๋ฃฌ๋ค.
CLI ์ค์น
์ค์น๋ ๊ฐ์ด๋ ๋ฌธ์๊ฐ ์์ด์ ๊ฝค ๊ฐํธํ ํธ์ด๋ค.

๋ฆฌ๋ ์ค์ ๊ฒฝ์ฐ์๋ ๋จ์ผ ๋ช ๋ น์ผ๋ก ๋ฐ๋ก ์ค์นํ ์ ์๋ค.
curl https://install.duckdb.org | sh

๊ทธ๋์ ์ด๋ ๊ฒ ์คํ์ด ๋๋ฉด, ์ค์น๋ ์ ๋ ๊ฒ์ด๋ค.
CLI๋ก ๋ฐ๋ก ์คํ (์ธ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋)
๋ฐ๋ก ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํ์ ์๊ณ , ๊ฐ๋จํ ํ๋ฐ์ฑ ํ ์คํธ๋ง ํ๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ฅ duckdb๋ง ์ณ์ ์คํํ๋ฉด ๋๋ค.

์ด ์ํ์์ writeํ ๋ฐ์ดํฐ๋ค์ ํ์ฌ duckdb ์คํ ์ปจํ
์คํธ์์๋ง ์ ํจํ๊ณ , ์ข
๋ฃํ๋ฉด ๋ค ๋ ๋ผ๊ฐ๋ค.
CLI๋ก ๋ฐ๋ก ์คํ (๋์คํฌ ๋ชจ๋)
duckdb๋ฅผ ์คํํ ๋ ์ ์ฅํ ์คํ ๋ฆฌ์ง ํ์ผ๋ช ์ ์ง์ ํ๋ฉด, DB ํ์ผ์ ์์ฑํ๋ฉด์ ๋์คํฌ ๋ชจ๋๋ก ์คํ๋๋ค.
์ด ์ํ์์ write๋ฅผ ํ๋ฉด ๊ทธ๊ฑด ์ด์ ์คํ ๋ฆฌ์ง์ ์ ์ฅ์ด ๋๋ค.
์ข
๋ฃํ๋ค ์ฌ์คํํด๋ ๋ณด์กด์ด ๋๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฐ ์์ผ๋ก ํ์ผ์ด ์์ฑ๋๋ค. wal๋ ํจ๊ป๋ค.
Query Syntax
DuckDB๋ ๊ธฐ๋ณธ์ ์ผ๋ก PostgreSQL ์คํ์ผ์ ๋ฌธ๋ฒ์ ์งํฅํ๋, Sqlite, MySQL์ ์ํฅ์ ๋ฐ์ ๋ถ๋ถ๋ ์๋ค.


๋ฐ์ดํฐ output ๊ธฐ๋ฅ
duckDB์ ํธ๋ฆฌํ ๋ถ๋ถ ์ค ํ๋๋, ๋ค๋ฅธ ๋ฐ์ดํฐ ํฌ๋งท๋ค๊ณผ์ ์ฐ๊ณ๊ฐ ์ฌ์ด ํธ์ด๋ผ๋ ๊ฒ์ด๋ค.
์ฟผ๋ฆฌ ์คํ์์ .์ผ๋ก ์์ํ๋ ๋ช
๋ น์ด๋ฅผ ์ ์ฉํ ์ ์๋๋ฐ, ์ด๋ฌ๋ฉด ์ถ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ๋งํฌ๋ค์ด ํ์ผ๋ก ๋ง๋ค๊ฒ ๋ค๋ ๋ป์ด ๋๋ค.
.mode markdown
.output series.md
SELECT *
FROM generate_series(5);


csv๋ ๋๊ณ
.mode csv
.output series.csv
SELECT *
FROM generate_series(6);

์ผ๋ฐ์ ์ธ ํฌ๋งท๋ค์ ๋ค ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ง์๋๋ ์ ์ฒด ์ถ๋ ฅํฌ๋งท ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ๋ค.
https://duckdb.org/docs/stable/clients/cli/output_formats.html
๋ฐ์ดํฐ import
duckDB๋ ์ธ๋ถ ๋ฐ์ดํฐ ํฌ๋งท์ ๋ฐ๋ก ๋ฐ์ดํฐ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฐ csv๊ฐ ์๋ค๋ฉด

๋ฐ๋ก ์ฟผ๋ฆฌ๋ฅผ ํตํด์ ๋ก๋ํด์ ์ธ ์ ์๋ ๊ฒ์ด๋ค.
SELECT *
FROM read_csv('series.csv',
delim = ',',
header = true,
columns = {
'generate_series': 'VARCHAR'
});

์ฐธ์กฐ
https://duckdb.org/docs/stable/clients/cli/overview.html
https://duckdb.org/docs/stable/data/csv/overview.html
https://duckdb.org/docs/stable/clients/cli/output_formats.html