博客 / 工程

世界上查询 JSON 文件速度最快的工具

author avatar
Pavel Kruglov
2022年10月14日 - 5 分钟阅读

racing-cars.jpg

简介

在 ClickHouse,我们对基准测试和性能充满热情。因此,当我第一次看到 Hacker News 的帖子“查询大型 JSON 文件最快的工具是用 Python 编写的”时,我的第一个想法是 - “但是 clickhouse-local 不是用 Python 编写的”。让我们看看这个基准测试,并证明 clickhouse-local 实际上是查询大型 JSON 文件速度最快的工具。

clickhouse-local

clickhouse-local 是一个单二进制文件,使您能够使用 SQL 对本地和远程文件执行快速处理 - 有效地实现无需数据库的数据库功能。除了支持 ClickHouse 函数的全部功能外,JSON 也是众多支持的文件格式之一。下面我们尝试可视化 ClickHouse 集群、单个 ClickHouse 实例和 clickhouse-local 之间的差异

clickhouse-local.png

基准测试

SPySQL 的创建者 Daniel Moura 发布了一个基准测试,作为 SPySQL 项目的一部分。该基准测试比较了几种命令行工具,重点是查询适合标准机器磁盘但不一定适合内存的大型文件。使用了 Amazon 图书评论数据集的 10GB 子集作为测试数据集。基准测试中使用的原始工具列表包括 SPySQL、jq、trdsql、Miller、OctoSQL、spqrk-sql、Pandas 和 DSQ。基准测试本身侧重于 3 个挑战

  • 映射:为所有行计算新列(批量输入和输出都很大)。这代表了数据清理和丰富所需的常见 ETL 类任务。
  • 聚合/Reduce:计算列的所有行的平均值(仅输入很大)。对于需要快速分析答案并希望避免将数据加载到 ClickHouse 等数据存储步骤的用户很有用。
  • 子集/过滤器:返回与过滤器条件匹配的列的前 100 个值(只需要处理输入的一部分)。此测试的目的是评估工具快速采样文件的能力,并代表用户在迭代查询之前经常执行的任务。

此基准测试的第一组结果显示 SPySQL 是查询大型 JSON 文件速度最快的工具

initial_results.png

但 Daniel 并不知道 clickhouse-local。为了协助完成此任务,ClickHouse 最近推出了两项很酷的功能,使处理 JSON 文件和重现此基准测试变得简单直接:支持半结构化数据存储和自动模式推断。后一个功能允许 ClickHouse 从数据本身推断列的类型,这样用户就不需要指定 JSON 文件的结构和每个字段的类型:简化了语法并加快了入门体验。

在联系 Daniel 后,他立即将 clickhouse-local 添加到他的基准测试中并更新了结果。令他惊讶的是,clickhouse-local 比以前的所有工具都快。OctoSQL(用 Go 编写)的开发人员之一也要求根据最新的改进更新基准测试,结果良好。下面我们展示更新后的基准测试结果。

映射挑战

map.png

1GB 数据的结果

map-results.png

聚合(reduce)挑战

reduce.png

1GB 数据的结果

reduce-results.png

过滤器(子集)挑战

subset.png

1GB 数据的结果

subset-results.png

结果摘要

results.png

更新后的结果已在此处发布。正如我们所见,clickhouse-local 在查询大型 JSON 文件方面比大多数其他工具快得多,而 OctoSQL 在较小的文件上表现出色。

此基准测试并不完美。每个查询只运行一次,因此可能会出现波动,并且在本地硬件上重现结果的用户可能会发现运行之间存在明显的差异。结果也可能因硬件和操作系统的差异而异。最后,Daniel 在他的方法中故意不在过滤器查询中使用 ORDER BY 子句。尽管这可能意味着不同工具的结果有所不同,因为 SQL 不强制执行默认顺序,但基准测试的目标是用户希望尽可能快地采样文件,以及工具避免完整扫描的能力。此测试为支持在满足 LIMIT 后提前终止的工具以及不需要将整个文件加载到内存中的工具带来了优势。

因此,下次您需要处理大型 JSON 文件时,您就知道该使用哪个工具了!

分享这篇文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image
©2025ClickHouse, Inc. 总部位于加利福尼亚州湾区和荷兰阿姆斯特丹。