跳到主要内容
跳到主要内容

Join Table Engine

用于 JOIN 操作的可选预处理数据结构。

备注

这不是关于 JOIN 子句 本身的文章。

创建表

查看 CREATE TABLE 查询的详细描述。

引擎参数

join_strictness

join_strictnessJOIN 严格性

join_type

join_typeJOIN 类型

主键列

k1[, k2, ...] – 来自 USING 子句的主键列,进行 JOIN 操作。

在没有引号的情况下输入 join_strictnessjoin_type 参数,例如 Join(ANY, LEFT, col1)。它们必须与表将用于的 JOIN 操作匹配。如果参数不匹配,ClickHouse 不会抛出异常,可能会返回不正确的数据。

特性和建议

数据存储

Join 表数据始终位于 RAM 中。当向表中插入行时,ClickHouse 会将数据块写入磁盘上的目录,以便在服务器重启时可以恢复。

如果服务器错误地重启,磁盘上的数据块可能会丢失或损坏。在这种情况下,您可能需要手动删除包含损坏数据的文件。

选择和插入数据

您可以使用 INSERT 查询向 Join 引擎表添加数据。如果表是使用 ANY 严格性创建的,则重复键的数据将被忽略。使用 ALL 严格性时,所有行都会被添加。

Join 引擎表的主要用例如下:

  • 将表放置在 JOIN 子句的右侧。
  • 调用 joinGet 函数,该函数允许您以与字典相同的方式从表中提取数据。

删除数据

对于 Join 引擎表的 ALTER DELETE 查询实现为 变更DELETE 变更读取过滤后的数据,并覆盖内存和磁盘中的数据。

限制和设置

创建表时,应用以下设置:

join_use_nulls

join_use_nulls

max_rows_in_join

max_rows_in_join

max_bytes_in_join

max_bytes_in_join

join_overflow_mode

join_overflow_mode

join_any_take_last_row

join_any_take_last_row

join_use_nulls

persistent

禁用 JoinSet 表引擎的持久性。

减少 I/O 开销。适用于追求性能且不需要持久性的场景。

可能的值:

  • 1 — 开启。
  • 0 — 关闭。

默认值:1

Join 引擎表不能在 GLOBAL JOIN 操作中使用。

Join 引擎允许在 CREATE TABLE 语句中指定 join_use_nulls 设置。 SELECT 查询应具有相同的 join_use_nulls 值。

使用示例

创建左侧表:

创建右侧 Join 表:

连接表:

作为替代,您可以指定连接键值从 Join 表中检索数据:

Join 表删除一行: