ClickHouse | 查询

1 ALL 子句   

04bd975f3462d2cdd4161e6b9166eeb6.png

2 ARRAY JOIN    

f70a6a6fe1fa8ff929f927ab4e4dbdd7.png

46d4699154a0d0eb24e7f8115962c43a.png    

使用别名 :在使用时可以为数组指定别名,数组元素可以通过此别名访问,但数组本身则通过原始名称访问

0593c8933ee95d83c2ca9f0f30c887d2.png

3 DISTINCT子句  

DISTINCT不支持当包含有数组的列    

d71ee402b685554a57d369088b054fe8.png

4 FROM子句  

FROM 子句指定从以下数据源中读取数据:

1.表

2.子查询 

3.表函数

JOIN 和 ARRAY JOIN 子句也可以用来扩展 的功能FROM

子查询是另一个 可以指定在 后的括号内的查询。

FROM 子句可以包含多个数据源,用逗号分隔,这相当于在他们身上执行 CROSS JOIN

5 GROUP BY子句    

3e512928eacf379d2ad96345d4d0c1c7.png

6 HAVING 子句  

允许过滤由 GROUP BY 生成的聚合结果. 它类似于 WHERE ,但不同的是 在聚合之前执行,而 之后进行。

可以从 生成的聚合结果中通过他们的别名来执行 子句。或者 子句可以筛选查询结果中未返回的其他聚合的结果。

限制HAVING如果不执行聚合则无法使用

7 Join    

支持的联接类型

所有标准 SQL JOIN 支持类型:

INNER JOIN,只返回匹配的行。

LEFT OUTER JOIN,除了匹配的行之外,还返回左表中的非匹配行。

RIGHT OUTER JOIN,除了匹配的行之外,还返回右表中的非匹配行。

FULL OUTER JOIN,除了匹配的行之外,还会返回两个表中的非匹配行。

CROSS JOIN,产生整个表的笛卡尔积, “join keys” 是 不 指定。

dd5550b1158f57046433ae46d0e0ebe2.png

06d3696b1888987fd6061a3fc7fb7ced.png

semi: 类似于mysql的exists、in查询

anti :类似于mysql的not exists、not in查询

ASOF 是一种模糊连接,允许在连接键之后追加定义一个模糊连接的匹配条件asof_column

ASOF会先以 left.key = right.key 进行连接匹配,然后根据AND 后面的 closest_match_cond(也就是这里的a.time >= b.time)过滤出最符合此条件的第一行连接匹配的数据。

对 asof_colum 字段的使用有3点需要注意:    

必须包含一个有序的序列

asof_column 必须Int, UInt, Float, Date, DateTime, Decimal.

asof_column不能是数据表内的唯一字段,也就是说连接键(JOIN KEY)和asof_column不能是同一字段

4eb905223d058d97057482efb90aaf19.png

034318b735812418ae023be421a0e7db.png

 分布式join  

ClicHouse分布式join通常涉及到左右表为分布式表,分布式执行过程中需要将数据在节点间进行交换,将数据在节点间交换的动作在分布式执行计划中称为数据的流动streaming算子,ClickHouse支持的streaming算子有如下三种:

Broadcast Join 数据广播算子

Shuffer Join 数据重分布算子    

Colocate Join 数据存储在本地不需要进行分布式交换

GLOBAL JOIN  

717cfda4167f34d57f824ef7e1573835.png

4f2f11cbba4048f33a0e5442a8791797.png

0d0e0dfd4e11c92c0d4b1b3f74977fb0.png    

a7d2c69984e2a328865b82bff110e088.png

Colocate Join  

75781028f6a8f022d462da61006f77b6.png

1eb7cf92e2c203b6741005fbdc16c242.png    

8e333c0ee210859925ecde201fce1a34.png

223887eb941b79c58cd6bdbef4d0d66c.png58f9cb6fafc2b4f1305d24a83bca4ef4.png

8 Limit  

LIMIT m 允许选择结果中起始的 行。m

LIMIT n, m 允许选择个 从跳过第一个结果后的m 行。与 语法是等效的。mnLIMIT m OFFSET n

n 和 必须是非负整数。m

如果没有 ORDER BY 子句显式排序结果,结果的行选择可能是任意的和非确定性的    

9192155f56f80dbd67a5e89d5e8e862a.png

9 Limit by  

c8e211b112f1c2082020a49b12cc1b06.png

94d0b616d1001c77102be1ad66508bbf.png    

10 Order by  

82087b9f9baf3e504e495a995ef03bcc.png

11 Where prewhere  

.PREWHERE与WHERE不同之处在于:使用PREWHERE时,首先只会去PREWHERE指定的列字段数据,用于数据过滤的条件判断。在数据过滤之后再读取SELECT声明的列字段以补全其余属性。所以在一些场合下,PREWHERE相比WHERE而言,处理的数据更少,性能更高。

clickhouse提供了自动

.          

.          

化优化的功能,会在条件合适的情况下将where替换为prewhere。默认已经开启了此参数

.          

33858c87adf57f5e554d8117f16ba43b.png

12 Sample  

语法

f78dc50cbe85e93f960983064f329da3.png

ee296dca5e03444eefd0c315e13249a3.png

举例

38eaad5a1a1c873bf96dc8f996b8e3d6.png

a74c1f4a0b18dc703095e57ab608fdf0.png

13 Union all  

dd92bb5a27899609f8e4d572aa06fed8.png

结果列通过它们的索引进行匹配(在内部的顺序 ).如果列名称不匹配,则从第一个查询中获取最终结果的名称

对联合执行类型转换。例如,如果合并的两个查询具有相同的字段与非- 和 从兼容类型的类型,由此产生的 有一个 类型字段

14 WITH子句  

ef2588926d4b9d210e7c41d4a8b692e0.png    

55ad940383eb008ac153eb81f2112aeb.png 

### ClickHouse 集群查询使用方法及常见问题解决方案 #### 一、ClickHouse 集群查询基础 在分布式环境中,ClickHouse 提供了 `Distributed` 表引擎来支持跨多个服务器的数据查询操作。通过配置文件中的 `<remote_servers>` 节点定义集群结构,并创建基于 `Distributed` 的虚拟表,可以实现对整个集群数据的统一访问[^2]。 以下是创建一个分布式表的基本语法: ```sql CREATE TABLE distributed_table ON CLUSTER default AS local_table ENGINE = Distributed(cluster_name, database_name, table_name); ``` 此语句会将本地表映射到指定的集群上,在执行查询时自动分发请求至各个节点并汇总结果。 #### 二、优化查询性能的方法 为了提高大规模数据分析场景下的效率,可以从以下几个方面入手调整参数设置: 1. **启用多线程处理** 设置合适的并发度能够充分利用硬件资源加速计算过程。可以通过修改 session-level 参数如 `max_threads` 来控制最大可用线程数[^1]。 2. **预聚合与索引技术应用** 对于频繁使用的维度字段建立低基数二级索引(例如 Bloom Filter),减少不必要的扫描范围;同时考虑采用 SummingMergeTree 或 AggregatingMergeTree 类型存储原始日志记录以便在线实时统计需求得到满足。 3. **合理分配 Shard 和 Replica 数量** 根据业务负载特性规划分区策略以及冗余级别,在保障高可用性的前提下尽量降低同步开销。 #### 三、典型错误排查指南 当遇到慢查询或者返回异常时,可按照如下步骤定位原因: 1. **检查 ProfileEvents 记录** 利用 system.profile_events 系统表监控各项指标变化趋势,找出瓶颈所在环节。 2. **分析 QueryLog 数据** 查阅 query_log 获取具体 SQL 文本及其耗时时长分布情况,进而针对性改进逻辑设计或物理架构布局。 3. **验证网络连通状况** 如果发现部分 shard 响应延迟较高,则需进一步确认是否存在防火墙拦截或者其他通信障碍因素影响正常交互行为。 4. **评估 ZooKeeper 性能表现** 尽管某些情况下允许省略外部依赖组件 ZK ,但在复杂事务管理场合仍推荐保留其功能角色以增强稳定性。 #### 四、实际案例分享 假设有一个电商订单系统需要定期生成销售报表,涉及数十亿条交易明细记录分布在不同区域数据中心内。此时可通过构建全局视图简化前端展示层开发工作量的同时保持高效检索能力: ```sql -- 创建分布式目标表结构 CREATE DATABASE IF NOT EXISTS sales; USE sales; CREATE TABLE order_details_dist ON CLUSTER global_cluster AS order_details_local ENGINE=Distributed(global_cluster,'sales','order_details_local'); -- 执行跨地域联合运算 SELECT product_id,SUM(amount) total_sales FROM order_details_dist WHERE date >= '2023-01-01' GROUP BY product_id ORDER BY total_sales DESC LIMIT 10; ``` 上述脚本展示了如何借助 ClickHouse 的强大联邦查询能力轻松应对海量级联关系难题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java小技巧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值