Join Table Engine
用于 JOIN 操作的可选预处理数据结构。
这不是关于 JOIN 子句 本身的文章。
创建表
查看 CREATE TABLE 查询的详细描述。
引擎参数
join_strictness
join_strictness
– JOIN 严格性。
join_type
join_type
– JOIN 类型。
主键列
k1[, k2, ...]
– 来自 USING
子句的主键列,进行 JOIN
操作。
在没有引号的情况下输入 join_strictness
和 join_type
参数,例如 Join(ANY, LEFT, col1)
。它们必须与表将用于的 JOIN
操作匹配。如果参数不匹配,ClickHouse 不会抛出异常,可能会返回不正确的数据。
特性和建议
数据存储
Join
表数据始终位于 RAM 中。当向表中插入行时,ClickHouse 会将数据块写入磁盘上的目录,以便在服务器重启时可以恢复。
如果服务器错误地重启,磁盘上的数据块可能会丢失或损坏。在这种情况下,您可能需要手动删除包含损坏数据的文件。
选择和插入数据
您可以使用 INSERT
查询向 Join
引擎表添加数据。如果表是使用 ANY
严格性创建的,则重复键的数据将被忽略。使用 ALL
严格性时,所有行都会被添加。
Join
引擎表的主要用例如下:
- 将表放置在
JOIN
子句的右侧。 - 调用 joinGet 函数,该函数允许您以与字典相同的方式从表中提取数据。
删除数据
对于 Join
引擎表的 ALTER DELETE
查询实现为 变更。DELETE
变更读取过滤后的数据,并覆盖内存和磁盘中的数据。
限制和设置
创建表时,应用以下设置:
join_use_nulls
max_rows_in_join
max_bytes_in_join
join_overflow_mode
join_any_take_last_row
join_use_nulls
persistent
禁用 Join
和 Set 表引擎的持久性。
减少 I/O 开销。适用于追求性能且不需要持久性的场景。
可能的值:
- 1 — 开启。
- 0 — 关闭。
默认值:1
。
Join
引擎表不能在 GLOBAL JOIN
操作中使用。
Join
引擎允许在 CREATE TABLE
语句中指定 join_use_nulls 设置。 SELECT 查询应具有相同的 join_use_nulls
值。
使用示例
创建左侧表:
创建右侧 Join
表:
连接表:
作为替代,您可以指定连接键值从 Join
表中检索数据:
从 Join
表删除一行: