DuckDB 作为新的 jq

最近对DuckDB项目感兴趣,它有无需额外依赖就能导入多种数据的功能,可直接将 JSON 作为数据库表读取解析等。作者日常大量处理 JSON,常用jq,但觉得其使用复杂,而熟悉 SQL 且几乎每天使用。以获取 GitHub 上 golang 组织的仓库信息为例,用jq处理的代码较复杂,而在 DuckDB 中用 SQL 则简单,如:

% duckdb -c "select license->>'key' as license, count(*) as count from 'repos.json' group by 1 order by count desc"

还可通过设置 DuckDB 标志获取 JSON 输出,处理后也可用jq进行美化打印。JSON 只是导入 DuckDB 的多种方式之一,此方法适用于 CSV、Parquet、Excel 文件等,且可选择创建表并本地持久化,通常只是查询数据无需持久化。还了解到 DuckDB 可直接从 URL 读取 JSON,如:

% duckdb -c "select license->>'key' as license, count(*) as count from read_json('https://api.github.com/orgs/golang/repos') group by 1 order by count desc"

更多关于 DuckDB 出色的 JSON 支持可阅读此博客文章:Shredding Deeply Nested JSON, One Vector at a Time

阅读 21
0 条评论