全球最快的 JSON 文件查询工具

图片

本文字数:1684;估计阅读时间:5分钟

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

图片

介绍

在 ClickHouse,我们热衷于基准测试和性能优化。所以当我第一次看到 Hacker News 上那篇“查询大型 JSON 文件的最快工具是用 Python 编写的”帖子时,我的第一个想法是——“但 clickhouse-local 不是用 Python 编写的”。让我们来看一下这个基准测试,证明 clickhouse-local 实际上是查询大型 JSON 文件的最快工具。

clickhouse-local

clickhouse-local 是一个单一的二进制文件,允许你使用 SQL 快速处理本地和远程文件,提供了无数据库的数据库功能。除了支持 ClickHouse 的所有功能外,它还支持多种文件格式,包括 JSON。下面我们尝试可视化 ClickHouse 集群、单个 ClickHouse 实例和 clickhouse-local 之间的区别:

图片

性能基准测试

SPySQL 的创建者 Daniel Moura 发布了一项作为 SPySQL 项目一部分的基准测试。该基准测试比较了几种命令行工具,重点是查询可以存储在标准机器磁盘上但可能无法完全放入内存的大文件。测试数据集使用了亚马逊书评数据集的 10GB 子集。基准测试中使用的工具包括 SPySQL、jq、trdsql、Miller、OctoSQL、spark-sql、Pandas 和 DSQ。基准测试主要包含 3 个挑战:

  • Map:

    为所有行计算一个新列(批量输入和输出都很大)。

    这代表了一种常见的 ETL 类任务,涉及数据清洗和丰富。

  • Aggregation/Reduce:

    计算一列所有行的平均值(只有输入很大)。

    适用于需要快速分析结果且想避免将数据加载到如 ClickHouse 这样的数据存储中的用户。

  • Subset/Filter:

    返回符合过滤条件的列的前 100 个值(只需要处理部分输入)。

    此测试评估工具快速采样文件的能力,代表用户在迭代查询前常执行的任务。

初步测试结果显示 SPySQL 是查询大型 JSON 文件的最快工具:

图片

但 Daniel 并不知道 clickhouse-local。为此,ClickHouse 最近引入了两个新功能,使处理 JSON 文件和复现此基准测试变得更加简单:支持半结构化数据存储和自动模式推断。后者允许 ClickHouse 从数据中推断列类型,因此用户无需指定 JSON 文件的结构和每个字段的类型,从而简化了语法并加速了入门体验。

在联系 Daniel 后,他迅速将 clickhouse-local 添加到他的基准测试中并更新了结果。令人惊讶的是,clickhouse-local 比之前的所有工具都快。OctoSQL 的一位开发人员(用 Go 编写)也要求根据最新改进更新基准测试,并取得了不错的结果。下图展示了更新后的基准测试结果。

Map 测试

图片

1GB 数据的测试结果

图片

聚合(reduce)测试

图片

1GB 数据的测试结果

图片

过滤(subset)测试

图片

1GB 数据的测试结果

图片

结果总结

图片

更新的结果已经发布在此。可以看到,clickhouse-local 在查询大型 JSON 文件时速度远超大多数其他工具,而 OctoSQL 在处理较小文件时表现优异。

这个基准测试并不完美。每个查询只运行一次,因此可能会有波动,用户在本地硬件上重现结果时可能会发现运行之间的明显差异。结果也可能由于硬件和操作系统的差异而有所不同。最后,Daniel 在过滤查询中故意没有使用 ORDER BY 子句。虽然这可能导致不同工具之间的结果不同,因为 SQL 并不强制默认顺序,但基准测试的目标是评估用户希望尽快对文件进行采样以及工具避免完全扫描的能力。这个测试对那些在满足 LIMIT 后支持早期终止并且不需要将整个文件加载到内存中的工具有利。

所以,下次你需要处理大型 JSON 文件时,就知道该用哪个工具了!

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营day31|134.加油站、135. 分发糖果、406.根据身高重建队列

134.加油站 如下图所示&#xff1a; 当索引一道2的时候&#xff0c;剩余油量的总量13-6 < 0&#xff0c;这个时候说明以索引0为起点不合适&#xff0c;将起点更新为索引3. 两点证明&#xff1a; 1.如果我们从蓝色段中间选一个点开始&#xff0c;是不是最后sumGas就不小于0…

从灵感到成品:使用AI生成博客文章的完整指南

在信息爆炸的时代&#xff0c;每个人都有讲述自己故事的权利和需求。博客作为一种表达方式&#xff0c;不仅能记录个人经历&#xff0c;还能分享知识和观点。然而&#xff0c;许多人在写博客文章时&#xff0c;常常会遇到灵感枯竭、时间不够用或者不知道如何开始等问题。幸运的…

光伏储能系统/安科瑞DTSD1352-CF双向计量表-安科瑞 蒋静

1 长期以来&#xff0c;我国施行居民用电低价政策&#xff0c;居民电价大幅低于供电成本&#xff0c;虽然实施了全天分三时段的阶梯电价政策&#xff0c;但过去近10年中高峰节电的效果却不够明显。从分时用电运作机制来看&#xff0c;居民用电价格的波动幅度不大&#xff0c;但…

华为云鲲鹏架构docker部署2048小游戏

华为云鲲鹏架构docker部署2048小游戏 1. 鲲鹏架构ESC2. 配置docker3. 上传2048镜像4. 删除容器,镜像 1. 鲲鹏架构ESC 2. 配置docker 安装dockeryum -y install docker开机启动 systemctl enable docker启动docker服务 systemctl start docker查询docker的运行版本 docker -v3…

时序分析基本概念介绍——min pulse width 最小脉冲宽度

文章目录 前言一、什么是 min pulse width&#xff1f;二、为什么检查 min pulse width&#xff1f;三、如何设置 min pulse width约束&#xff1f;1. 在sdc里面定义2. library里面定义 四、如何检查 min pulse width&#xff1f;五、如何修复 min pulse width&#xff1f;总结…

docker启动ws-scrcpy和redroid记录

git克隆最新的ws-scrcpy代码 git clone gitgithub.com:NetrisTV/ws-scrcpy.git进入ws-scrcpy目录新建Dockerfile文件&#xff0c;内容如下 FROM node:16-alpine WORKDIR /appRUN npm config set registry http://mirrors.cloud.tencent.com/npm/ RUN npm install -g node-gyp…

攻防世界-Web题目1

目录 cookie 1、题目 2、知识点 3、思路 get_post 1、题目 2、知识点 3、思路 disabled_button 1、题目 2、知识点 3、思路 backup 1、题目 2、知识点 3、思路 cookie 1、题目 2、知识点 cookie&#xff0c;数据包 3、思路 题目提示我们cookie&#xff0c;抓…

【ai】trition:tritonclient.utils.shared_memory 仅支持linux

Can’t find tritonclient.utils.shared_memory on WIN10 #4149yolov4的python客户端 导入以后,windows 的pycharm 就是看不到折腾了很久:SaviorEnv 环境下安装tritonclient[all]也会失败 (base) C:\Users\zhangbin>conda create -n SaviorEnv python=3.8 Collecting pack…

ubuntu 18 虚拟机安装(1)

ubuntu 18 虚拟机安装 ubuntu 18.04.6 Ubuntu 18.04.6 LTS (Bionic Beaver) https://releases.ubuntu.com/bionic/ 参考&#xff1a; 设置固定IP地址 https://blog.csdn.net/wowocpp/article/details/126160428 https://www.jianshu.com/p/1d133c0dec9d ubuntu-18.04.6-l…

元数据管理的发展历程你了解吗?元数据管理要克服哪些挑战?

在当今的信息化时代&#xff0c;数据的价值已被广泛认可&#xff0c;而元数据作为描述数据的数据&#xff0c;其作用日益凸显。元数据管理&#xff0c;作为确保数据质量、促进数据共享和提高数据透明度的关键环节&#xff0c;对企业的数据战略至关重要。随着技术的发展&#xf…

C#1.0-11.0所有历史版本主要特性总结

文章目录 前言名词解释主要版本一览表各版本主要特性一句话总结 C# 1.0 (Visual Studio 2002, .Net Framework 1.0)C# 2.0 (Visual Studio 2005, .Net Framework 2.0)C# 3.0 (Visual Studio 2008, .Net Framework 3.0)C# 4.0 (Visual Studio 2010, .Net Framework 4)C# 5.0 (V…

DataWhale - 吃瓜教程学习笔记(三)

学习视频&#xff1a;第3章-对数几率回归_哔哩哔哩_bilibili 西瓜书对应章节&#xff1a; 3.3 对数几率回归 sigmoid函数 极大似然估计建模 信息论 以概率论、随机过程为基本研究工具&#xff0c;研究广义通信系统的整个过程 - 信息熵 &#xff08;信息期望&#xff09; 度…

Windows bat 提取多个目录下的文件,到一个目录

批处理命令 echo off setlocalrem 设置源目录和目标目录 set "sourceDirE:\motrix" set "targetDirE:\新建文件夹"rem 创建目标目录&#xff0c;如果不存在 if not exist "%targetDir%" mkdir "%targetDir%"rem 循环遍历源目录中的所…

TCP:TCP连接的建立与终止

TCP连接的建立与终止 建立连接第一次握手第二次握手第三次握手 终止连接第一次挥手第二次挥手第三次挥手第四次挥手 T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。本文将详细讨论一个T C P连接是如何建立的以及通信…

2024年能源电力行业CRM研究报告

中国能源电力行业属于大制造业的重要组成部分&#xff0c;在国民经济中的地位举足轻重。据统计&#xff0c;近十年来能源电力行业的整体投资呈现出增长趋势&#xff0c;尤其是“十四五”期间增长显著&#xff0c;2022年全国主要电力企业共完成投资12470亿元&#xff0c;同比增长…

【乐吾乐2D可视化组态编辑器】连线

1 连线的绘制 1.1 钢笔绘制连线 1.1.1 曲线、线段、直线、脑图曲线 开始&#xff1a;单击左键 暂停&#xff1a;单击右键 或 enter 结束&#xff1a;esc 乐吾乐2D可视化组态编辑器demo&#xff1a;https://2d.le5le.com/ 1.1.2 横线 按下快捷键shift,点击鼠标左键绘制…

101.6k星的后台巨擘:一站式SaaS多租户、商城、CRM、ERP解决方案

RuoYi-Vue Pro,一个丰富优化重构的后台管理系统,为企业提供了一个强大、灵活、易用的解-决方案。 特点 丰富的功能支持:包括RBAC动态权限、数据权限、SaaS多租户、工作流、三方登录、支付、短信等。 现代化的技术栈:基于Spring Boot、MyBatis Plus、Vue & Element,支持…

在UE中创建命名管道之创建UE蓝图类

需求 在实际工作遇到了需要 UE 开发进程间通信相关的需求。 经过思考后选择使用命名管道来实现 。 名词概念 首先什么是进程间通信: 进程间通信&#xff08; Inter-Process Communication&#xff0c;IPC&#xff09;是指在操作系统中&#xff0c;不同进程之间进行数据交换…

大厂面试官问我:Redis内存淘汰,LRU维护整个队列吗?【后端八股文四:Redis内存淘汰策略八股文合集】

往期内容&#xff1a; 大厂面试官问我&#xff1a;Redis处理点赞&#xff0c;如果瞬时涌入大量用户点赞&#xff08;千万级&#xff09;&#xff0c;应当如何进行处理&#xff1f;【后端八股文一&#xff1a;Redis点赞八股文合集】-CSDN博客 大厂面试官问我&#xff1a;布隆过滤…

精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手

知识图谱&#xff08;关系网络&#xff09;可以用简单的形状和线条显示复杂的系统&#xff0c;帮助我们理解数据之间的联系。我们今天将介绍15个很好用的免费工具&#xff0c;可以帮助我们绘制网络图。 NetworkX NetworkX是一个用于处理网络的Python工具。许多人在Python中处…