duckdb
Installation
brew install duckdb
Examples
CSV
다음과 같은 csv 파일이 있다고 하자.
ID,name,math,science,english
1,Kim Cheolsu,85,90,78
2,Lee Younghee,88,92,95
3,Park Minsoo,70,85,80
4,Choi Jiwoo,95,88,92
5,Kim Junho,78,74,80
duckdb -c
를 사용해 다음과 같이 csv 파일에 대해 SQL을 사용할 수 있다.
$ duckdb -c "select * from 'test.csv'"
┌───────┬──────────────┬───────┬─────────┬─────────┐
│ ID │ name │ math │ science │ english │
│ int64 │ varchar │ int64 │ int64 │ int64 │
├───────┼──────────────┼───────┼─────────┼─────────┤
│ 1 │ Kim Cheolsu │ 85 │ 90 │ 78 │
│ 2 │ Lee Younghee │ 88 │ 92 │ 95 │
│ 3 │ Park Minsoo │ 70 │ 85 │ 80 │
│ 4 │ Choi Jiwoo │ 95 │ 88 │ 92 │
│ 5 │ Kim Junho │ 78 │ 74 │ 80 │
└───────┴──────────────┴───────┴─────────┴─────────┘
where
, like
, limit
등을 사용할 수 있다. 대부분의 SQL 문법을 지원한다.
$ duckdb -c "select name, math from read_csv('test.csv') where name like 'K%'"
┌─────────────┬───────┐
│ name │ math │
│ varchar │ int64 │
├─────────────┼───────┤
│ Kim Cheolsu │ 85 │
│ Kim Junho │ 78 │
└─────────────┴───────┘
한글도 잘 작동하므로, 한글 데이터 파일에 대해서도 문제없다.
JSON
JSON 에 대해서도 SQL을 사용할 수 있다.
[
{"ID": 1, "name": "Kim Cheolsu", "math": 85, "science": 90, "english": 78},
{"ID": 2, "name": "Lee Younghee", "math": 88, "science": 92, "english": 95},
{"ID": 3, "name": "Park Minsoo", "math": 70, "science": 85, "english": 80},
{"ID": 4, "name": "Choi Jiwoo", "math": 95, "science": 88, "english": 92},
{"ID": 5, "name": "Kim Junho", "math": 78, "science": 74, "english": 80}
]
$ duckdb -c "select * from read_json('test.json')"
┌───────┬──────────────┬───────┬─────────┬─────────┐
│ ID │ name │ math │ science │ english │
│ int64 │ varchar │ int64 │ int64 │ int64 │
├───────┼──────────────┼───────┼─────────┼─────────┤
│ 1 │ Kim Cheolsu │ 85 │ 90 │ 78 │
│ 2 │ Lee Younghee │ 88 │ 92 │ 95 │
│ 3 │ Park Minsoo │ 70 │ 85 │ 80 │
│ 4 │ Choi Jiwoo │ 95 │ 88 │ 92 │
│ 5 │ Kim Junho │ 78 │ 74 │ 80 │
└───────┴──────────────┴───────┴─────────┴─────────┘
$ duckdb -c "select * from 'test.json' limit 2"
┌───────┬──────────────┬───────┬─────────┬─────────┐
│ ID │ name │ math │ science │ english │
│ int64 │ varchar │ int64 │ int64 │ int64 │
├───────┼──────────────┼───────┼─────────┼─────────┤
│ 1 │ Kim Cheolsu │ 85 │ 90 │ 78 │
│ 2 │ Lee Younghee │ 88 │ 92 │ 95 │
└───────┴──────────────┴───────┴─────────┴─────────┘
read_json('/dev/stdin')
이나 read_csv('/dev/stdin')
을 사용하면 stdin으로부터 데이터를 읽을 수 있다.
$ cat test.json | duckdb -c "select name, english from read_json('/dev/stdin') where name like 'K%'"
┌─────────────┬─────────┐
│ name │ english │
│ varchar │ int64 │
├─────────────┼─────────┤
│ Kim Cheolsu │ 78 │
│ Kim Junho │ 80 │
└─────────────┴─────────┘