GN⁺: 새로운 jq로서의 DuckDB
(pgrs.net)DuckDB, 새로운 jq로 떠오르다
- DuckDB 프로젝트는 데이터 애플리케이션을 위한 SQLite와 같은 데이터베이스로, 추가 의존성 없이 다양한 데이터 형식을 가져올 수 있는 기능을 포함.
- JSON 파일을 데이터베이스 테이블로 직접 읽고 파싱할 수 있으며, 이는 다른 많은 형식에도 적용됨.
- JSON 작업 시 주로
jq
를 사용하지만, 복잡한jq
문법 대신 SQL에 익숙하기 때문에 DuckDB를 사용하는 것이 더 편리함. - 예를 들어, GitHub API를 사용하여 golang 조직의 저장소 정보를 JSON으로 가져온 후, 오픈소스 라이선스 유형에 대한 통계를 얻는 작업을 SQL로 간단히 수행할 수 있음.
- DuckDB를 사용하여 SQL 문을 작성하는 것은 문서를 참조하지 않고도 쉽게 할 수 있으며, PostgreSQL JSON 함수와 유사한 문법을 사용함.
- DuckDB는 JSON 출력도 지원하며, 필요한 경우
jq
를 사용하여 결과를 예쁘게 출력할 수 있음. - DuckDB는 JSON뿐만 아니라 CSV, parquet, Excel 파일 등 다양한 데이터 형식을 가져올 수 있음.
- 데이터를 지속적으로 저장할 필요가 없는 경우, 테이블을 생성하지 않고 데이터를 쿼리할 수 있음.
- DuckDB는 로컬 파일뿐만 아니라 URL에서 직접 JSON을 읽을 수도 있음.
GN⁺의 의견
- DuckDB는 데이터 분석과 관련된 작업을 자주 하는 사용자들에게 흥미로운 도구가 될 수 있음. 특히, SQL에 익숙한 사람들에게는 JSON 데이터를 쉽게 다룰 수 있는 강력한 대안이 될 수 있음.
- DuckDB가 JSON 데이터를 직접 읽을 수 있다는 점은 데이터 전처리 과정을 단순화시키고, 데이터 파이프라인을 구축할 때 별도의 데이터 변환 단계를 줄일 수 있는 장점을 제공함.
- DuckDB의 사용이 확산되면, 데이터 분석 및 처리를 위한 기존의 복잡한 도구들과 비교하여 학습 곡선을 낮추고 생산성을 향상시킬 수 있음.
- 하지만, DuckDB가 아직 널리 알려지지 않았거나 커뮤니티 지원이 충분하지 않다면, 사용자들이 문제에 직면했을 때 해결책을 찾기 어려울 수 있음.
- DuckDB와 유사한 기능을 제공하는 다른 오픈소스 프로젝트로는 Apache Drill이나 PrestoDB가 있으며, 이들도 대규모 데이터셋에 대한 SQL 쿼리를 지원함.
Hacker News 의견
-
jq와 기본 쉘 도구의 조합
- jq의 문법과 데이터 모델은 매우 우아하고 강력하지만, 표준 라이브러리가 부족하고 설계상의 어색함이 있어 일상적인 작업이 복잡할 수 있음.
- jq는 데이터를 줄 단위의 텍스트로 잘 변환하여 유닉스 쉘 도구와 결합하기 좋음.
- 예를 들어, 프로젝트 목록에서 OSS 라이선스를 추출하고 각각의 사용 횟수를 세는 작업은
curl ... | jq '.[].license.key' | sort | uniq -c
로 간단히 처리 가능.
-
Babashka와 Clojure
- Lisp과 Clojure를 좋아한다면 Babashka를 확인해 볼 것.
- Babashka를 사용하여 JSON 파일을 처리하고 데이터를 그룹화하고 카운트하는 예시 코드 제공.
-
ClickHouse 로컬 CLI
- ClickHouse 로컬 CLI는 JSON과 CSV 등의 형식을 파싱하고 쿼리하는 데 매우 빠름.
- "세계에서 가장 빠른 JSON 쿼리 도구"라고 불리며, 서버리스 데이터 분석을 위한 작은 도구로 소개됨.
-
jq와 DuckDB 및 SQL의 사용
- jq는 필터링, 매핑, 연결 등의 작업에 이상적임.
- 예를 들어, 특정 다운로드 링크를 찾거나 Terraform 상태에서 Kubernetes 클러스터의 KUBE_CONFIG을 추출하는 등의 작업에 jq를 사용할 수 있음.
-
Google Sheets 쿼리
- 공개된 Google Sheets 데이터를 SQL과 유사한 방식으로 쿼리할 수 있음.
-
SQLite 데이터베이스를 사용한 구조화된 로깅
- 매일 생성되는 로그 이벤트를 JSON 객체로 저장하고, 특정 필드에 인덱스를 생성하여 SQL 쿼리로 검색할 수 있음.
-
Benthos
- 데이터 변환과 메시지 버스, 웹훅, 데이터베이스로의 데이터 이동에 Benthos를 사용할 수 있음.
-
Nushell
- Nushell은 임시 데이터 조작과 일반적인 쉘 작업에 유용함.
-
pq (prql-query)
- DuckDB, DataFusion, PRQL을 활용하여 터미널에서 데이터 작업을 쉽고 재미있게 하기 위해 pq를 만듦.
- 현재 유지 관리가 어려워 아카이브 상태이지만, 협력할 사람이 있다면 상황을 바꿀 수 있음.
-
JSON과 프로그래밍 언어의 사용
- JSON을 프로그래밍 언어의 해시맵과 같은 데이터 구조로 다루는 것과 비교하여 이점이 불분명함.
- 대화형으로 작업하고 싶다면 노트북이나 REPL을 사용할 수 있음.