ClickHouse进阶(八):Clickhouse数据查询-2- Join子句

news2024/12/24 20:36:32

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!

 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


目录

1. 连接精度

2. 连接类型

​​​​​​​3. 注意事项


Join子句可以对左右两张表的数据进行连接,join语法包含连接精度和连接类型两部分。参照下图帮助大家理解:

上图可知,连接精度分为ALL、ANY、ASOF三种,而连接类型分为外连接、内连接、交叉连接三种。我们对连接类型并不陌生,下面重点介绍连接精度。

为了方便测试,我们创建以下2张表:join_tbl1、join_tbl2,分别创建两张表,并插入数据:

#创建join_tbl1表

node1 :) CREATE TABLE join_tbl1

(

    `id` UInt8,

    `name` String,

    `time` DateTime

)

ENGINE = MergeTree()

ORDER BY id



#向表join_tbl1中插入数据

node1 :) insert into join_tbl1 values (1,'zs','2021-11-01 12:00:00'),(2,'ls','2021-11-01 12:30:00'),(3,'ww','2021-11-01 13:00:00'),(4,'zs','2021-11-01 13:30:00'),(5,'zs','2021-11-01 14:00:00');

#创建join_tbl2表
node1 :) CREATE TABLE join_tbl2
(
    `id` UInt8,
    `score` UInt8,
    `time` DateTime
)
ENGINE = MergeTree()
ORDER BY id;

#向表join_tbl2中插入数据
node1 :) insert into join_tbl2 values (1,100,'2021-11-01 11:55:00'),(1,200,'2021-11-01 12:01:00'),(2,300,'2021-11-01 13:10:00'),(2,400,'2021-11-01 14:30:00'),(6,500,'2021-11-01 15:00:00');

1. 连接精度

连接精度决定了join查询在连接数据时所使用的策略,目前支持ALL、ANY和ASOF三种类型。

  • ALL

如果左表内的一行数据在右表中有多行数据与之连接匹配,则返回右表中全部连接的数据,操作如下:

node1 :) SELECT
    a.id,
    a.name,
    a.time,
    b.id,
    b.score,
    b.time
FROM join_tbl1 AS a
ALL INNER JOIN join_tbl2 AS b ON a.id = b.id

结果返回了右表中所有与左表id相匹配的数据。

  • ANY

如果左表内的一行数据在右表中有多行数据与之连接匹配,则仅返回右表中的第一行连接的数据。操作如下:

node1 :) SELECT

    a.id,

    a.name,

    a.time,

    b.id,

    b.score,

    b.time

FROM join_tbl1 AS a

ANY INNER JOIN join_tbl2 AS b ON a.id = b.id

查询结果如下,返回了右表中与左表id相连接的第一行数据


  • ASOF

ASOF是一种模糊查询,它允许在连接键之后追加定义一个模糊连接的匹配条件asof_column(此条件要求不等式,大于或者小于)。举例如下:

node1 :) SELECT a.id,a.name,a.time,b.id,b.score,b.time FROM join_tbl1 a  ASOF INNER JOIN join_tbl2 b ON a.id = b.id AND a.time>=b.time;

2. 连接类型

连接类型与Mysql中的连接类型意思相同,这里就不再详解介绍,直接操作,操作如下:

  • INNER
node1 :) SELECT a.id,a.name,a.time,b.id,b.score,b.time FROM join_tbl1 a  INNER JOIN join_tbl2 b ON a.id = b.id;

  • LEFT OUTER JOIN
node1 :) SELECT a.id,a.name,a.time,b.id,b.score,b.time FROM join_tbl1 a  LEFT OUTER JOIN join_tbl2 b ON a.id = b.id;

  • RIGHT OUTER JOIN
node1 :) SELECT a.id,a.name,a.time,b.id,b.score,b.time FROM join_tbl1 a  RIGHT OUTER JOIN join_tbl2 b ON a.id = b.id;

  • FULL JOIN
node1 :) SELECT a.id,a.name,a.time,b.id,b.score,b.time FROM join_tbl1 a  FULL OUTER JOIN join_tbl2 b ON a.id = b.id;

  • CROSS

CROSS JOIN 表示交叉连接,返回左表与右表两个数据集合的笛卡尔积,不需要指定JOIN key 连接键。

node1 :) SELECT a.id,a.name,a.time,b.id,b.score,b.time FROM join_tbl1 a  CROSS JOIN join_tbl2 b;

​​​​​​​3. 注意事项

在clickhouse使用中,一般作为DWS或者DM层数据使用,很少会有JOIN操作。在使用JOIN查询时,为了优化JOIN查询性能,应该遵循左大右小的原则,即将数据量小的表放在右侧。这是因为在执行JOIN查询时,无论使用哪种JOIN连接方式,右表都会被全部加载到内存中与左表进行比较。

另外,join也没有缓存机制,每一次join查询就算是执行相同的sql查询,也会生成一次全新的查询计划。

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

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

相关文章

Unity3D开发流程及注意事项

使用Unity3D开发游戏需要遵循一定的流程和注意事项,以确保项目的顺利进行并获得良好的结果。以下是一般的游戏开发流程以及一些注意事项,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 游…

【笔记】软件测试的艺术

软件测试的心理学和经济学 测试是为发现错误而执行程序的过程,所以它是一个破坏性的过程,测试是一个“施虐”的过程。 软件测试的10大原则 1、测试用例需要对预期输出的结果有明确的定义 做这件事的前提是能够提前知晓需求和效果图,如果不…

测评补单成为亚马逊、速卖通等跨境电商趋势:解析需求背后的原因

今天就不分享测评技术知识点了,来聊一聊如今做跨境电商为什么对测评补单有这么大的需求。 如今在跨境电商行业,测评补单的需求日益增长,尽管平台一直对其进行禁止。这主要是出于以下几方面的原因,使得测评越来越成为一种趋势&…

方案展示 | RK3588开发板Linux双摄同显方案

iTOP-RK3588开发板使用手册更新,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 RK3588开发板载4路MIPI CAMERA摄像头接口、MIPI CSI DPHY的4.5Gbps、2.5Gops的MIPI CSI CPHY,四路同时输入&#xf…

每天一个工业通信协议(2)2023.8.28 (CAN协议)

文章目录 参考资料1.CAN协议介绍2.CAN的特点3.CAN的通信单元始终处于错误的三种状态之一4.CAN协议的基本概念5.CAN协议的两种ISO标准的不同6.CAN协议6.1 帧的种类6.2 数据帧6.3 遥控帧6.4 错误帧6.5 过载帧参考资料 瑞萨电子《CAN入门书》 1.CAN协议介绍 答: CAN 是 Contro…

编程学习的方向与赛道的选择没有最优解的

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

超越传统营销:海外网红带货能力的6大关键特质!

随着社交媒体的崛起和全球互联网的普及,海外网红已经成为了商业领域中不可忽视的力量。这些具有强大带货能力的网红不仅仅是广告代言人,更是品牌营销的重要合作伙伴。他们凭借其独特的魅力和行动力,在市场中掀起了一股风潮。社交媒体里网红那…

ChatGPT可以生成Windows密钥

ChatGPT 可以回答许多问题、生成和修改代码,最近还可以生成 Windows 10 和 Windows 11 的许可证密钥。自从 OpenAI 的 ChatGPT 推出以来,人工智能已成为许多用户面临的挑战。 他们不断地试图削弱这种智力,或者想尝试它的局限性和可能性。例如…

国内较好的iPaaS供应商有哪些?

iPaaS是什么 iPaaS,全称Integration Platform as a Service,集成平台即服务。 集成一般说的是系统集成(System Integration),通常是指将软件、硬件与通信技术组合起来为用户解决信息处理问题的业务,集成的…

城市小车的优势,用五菱宏光mini,轻松应对城市拥堵与环保挑战。

掌握五菱宏光mini的驾驶技巧,让拥堵不再困扰你 合理利用车辆尺寸,轻松穿梭于城市道路 五菱宏光mini的尺寸小巧,长度不到3米,宽度不到1.5米,让你可以在狭窄的城市街道上轻松穿梭。掌握这一技巧,让你在拥堵…

MySQL 如何避免 RC 隔离级别下的 INSERT 死锁?

本文分析了 INSERT 及其变种(REPLACE/INSERT ON DUPLICATE KEY UPDATE)的几个场景的死锁及如何避免。 作者:张洛丹,DBA 数据库技术爱好者~ 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

Python类的方法

Python类的方法主要分为实例方法、类方法和静态方法三种。 1 实例方法 以self作为第一个参数的方法,就是类的实例方法。该方法由类的实例调用,Python会把调用该方法的实例对象传递给self。 如下代码定义了一个名为A的类。 class A:def __init__(self…

无频闪护眼灯哪个好?什么是无频闪

随着科技的不断发展,工作时使用电子设备越来越普遍,如何保护我们的眼睛不受蓝光、频闪等危害就变得极其重要了。护眼台灯,顾名思义就是保护眼睛的台灯,其工作原理是在光源处使用特殊的防蓝光灯珠,并通过控制电流的稳定性来达到防频…

【STM32】文件系统FATFS与Flash的初步使用

文件系统简介 简介可以不看,直接看移植步骤 文件系统是介于应用层和底层间的模糊层。底层提供API,比如说使用SDIO或者SPI等读写一个字节。文件系统把这些API组合包装起来,并且提供一些列函数,我们可以使用这些函数进行更进一步的…

开发指导—利用组件插值器动画实现 HarmonyOS 动效

一. 组件动画 在组件上创建和运行动画的快捷方式。具体用法请参考通用方法。 获取动画对象 通过调用 animate 方法获得 animation 对象&#xff0c;animation 对象支持动画属性、动画方法和动画事件。 <!-- xxx.hml --><div class"container"> <di…

IntelliJ IDEA中用git提交代码时忽略文件的设置

设置IDEA自动过滤掉不需要提交的文件或文件夹&#xff1a;如*.iml, .idea,target 文件夹 1、进入idea设置界面 Windows环境&#xff1a;File - Settings - Editor - File Types Mac环境&#xff1a;Preferences… - Editor - File Types 2、在下面的ignore files and folders…

SPA和MPA

SPA与MPA是什么 **SPA&#xff08;Single Page Application&#xff0c;单页应用&#xff09;**在首次加载时会下载一个单独的HTML文件&#xff0c;然后通过JavaScript动态加载内容&#xff0c;无需每次页面刷新时重新加载整个页面。**MPA&#xff08;Multi-Page Application&…

【校招VIP】java语言考点之关键字string

考点介绍&#xff1a; string作为一个特殊类&#xff0c;正常情况下&#xff0c;是遵循对象的值和引用的使用。有一定的考察频度&#xff0c;但有的时候也能代表相等&#xff0c;与常量区的插入有关。 java语言考点之关键字string-相关题目及解析内容可点击文章末尾链接查看&a…

redis缓存失效时间没到,数据莫名丢失问题排查

述&#xff1a;redis缓存了token&#xff0c;失效时间为24小时&#xff0c;可是每次不到多久&#xff0c;就提示token失效&#xff0c;重新登录后&#xff0c;没用多久&#xff0c;又提示token失效。查看了下缓存&#xff0c;发现数据全部没掉了&#xff0c;并且多了几个back1&…

电脑提示“系统找不到指定的文件”怎么办?

“系统找不到指定的文件”对于Windows用户来说是一个很常见的错误&#xff0c;尤其是Win10用户&#xff0c;经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码&#xff1a;0x80070002&#xff0c;但是&#xff0c;故障类型或代码在不同的操作系统规范上是不…