Join 表引擎
用于 JOIN 操作的可选准备数据结构。
这不是关于 JOIN 子句 本身的文章。
在 ClickHouse Cloud 中,如果您的服务是使用早于 25.4 的版本创建的,您需要使用 SET compatibility=25.4 将兼容性设置为至少 25.4。
创建表
请参阅 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
持久性
禁用 Join 和 Set 表引擎的持久性。
减少 I/O 开销。适合追求性能而不需要持久性的场景。
可选值:
- 1 — 启用。
 - 0 — 禁用。
 
默认值:1。
Join 引擎表不能用于 GLOBAL JOIN 操作。
Join 引擎允许在 CREATE TABLE 语句中指定 join_use_nulls 设置。SELECT 查询应具有相同的 join_use_nulls 值。
使用示例
创建左侧表:
创建右侧 Join 表:
连接表:
作为替代,您可以从 Join 表中检索数据,指定连接键值:
从 Join 表中删除一行: