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 来合并多个查询的结果集。

相关推荐
小牛头#2 天前
clickhouse 各个引擎适用的场景
大数据·clickhouse·机器学习
全干engineer2 天前
ClickHouse 入门详解:它到底是什么、优缺点、和主流数据库对比、适合哪些场景?
数据库·clickhouse
爱吃萝卜的猪2 天前
Clickhouse诊断工具之chdig
clickhouse
源图客2 天前
ClickHouse介绍与应用
clickhouse
码农周2 天前
ClickHouse 时间范围查询:精准筛选「本月数据」
clickhouse
积跬步,慕至千里4 天前
clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结
数据库·clickhouse
Edingbrugh.南空4 天前
Flink ClickHouse 连接器数据读取源码深度解析
java·clickhouse·flink
Edingbrugh.南空4 天前
ClickHouse 全生命周期性能优化
clickhouse·性能优化
Edingbrugh.南空5 天前
Flink ClickHouse 连接器:实现 Flink 与 ClickHouse 无缝对接
大数据·clickhouse·flink
Edingbrugh.南空6 天前
Flink ClickHouse 连接器维表源码深度解析
java·clickhouse·flink