ClickHouse中使用UNION

在 ClickHouse 中,UNION 用于合并两个或多个查询的结果集。ClickHouse 默认支持的是 UNION ALL,即合并结果集时不去重。如果需要使用 UNION DISTINCT(即合并结果集时去重),可以显式地指定。

UNION ALL

UNION ALL 不去重,直接合并结果集。

sql 复制代码
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;

UNION DISTINCT

UNION DISTINCT 会对合并后的结果进行去重。

sql 复制代码
SELECT id, name FROM table1
UNION DISTINCT
SELECT id, name FROM table2;

示例表结构

假设有两个表 table1table2,它们的结构如下:

sql 复制代码
CREATE TABLE table1 (
    id UInt32,
    name String
) ENGINE = MergeTree()
ORDER BY id;

CREATE TABLE table2 (
    id UInt32,
    name String
) ENGINE = MergeTree()
ORDER BY id;

使用 UNION ALL 和 UNION DISTINCT 的示例

UNION ALL 示例

合并两个表的所有记录:

sql 复制代码
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;
UNION DISTINCT 示例

合并两个表并去重:

sql 复制代码
SELECT id, name FROM table1
UNION DISTINCT
SELECT id, name FROM table2;

使用 ORDER BY 和 LIMIT

如果需要对合并后的结果进行排序或限制结果集的大小,可以在 UNION 后使用 ORDER BYLIMIT

UNION ALL 和 ORDER BY
sql 复制代码
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2
ORDER BY id;
UNION DISTINCT 和 LIMIT
sql 复制代码
SELECT id, name FROM table1
UNION DISTINCT
SELECT id, name FROM table2
LIMIT 10;

注意事项

  1. 列数和数据类型需要一致:每个子查询的列数和数据类型需要保持一致,否则会导致查询失败。
  2. 性能考虑UNION DISTINCT 需要对结果集去重,因此可能会比 UNION ALL 消耗更多的资源。

通过这些示例,你可以在 ClickHouse 中使用 UNION ALLUNION DISTINCT 来合并多个查询的结果集。

相关推荐
l1t6 天前
DeepSeek总结的用Parquet从 ClickHouse 迁移至 CedarDB查询
clickhouse·cedardb
longxibo17 天前
【Ubuntu datasophon1.2.1 二开之六:解决CLICKHOUSE安装问题】
大数据·linux·clickhouse·ubuntu
l1t18 天前
在python 3.14 容器中安装和使用chdb包
开发语言·python·clickhouse·chdb
linweidong20 天前
别让老板等:千人并发下的实时大屏极致性能优化实录
jmeter·clickhouse·性能优化·sentinel·doris·物化视图·离线数仓
Paraverse_徐志斌20 天前
基于 Kafka + Flink + ClickHouse 电商用户行为实时数仓实践
大数据·clickhouse·flink·kafka·olap·etl
李兆龙的博客21 天前
从一到无穷大 #62 ClickHouse 加速机制持久化格式拆解
clickhouse
麦兜和小可的舅舅1 个月前
ClickHouse 一次Schema修改造成的Merge阻塞问题的分析和解决过程
clickhouse
bigdata-rookie1 个月前
StarRocks(2.5.1)vs Clickhouse(21.7.3.14)集群 SSB 性能测试
clickhouse
CTO Plus技术服务中1 个月前
ClickHouse原理解析与应用实践教程
clickhouse