【ClickHouse 极简教程】分布式下的 IN/JOIN 及 GLOBAL关键字

本文详细介绍了ClickHouse中的分布式JOIN实现,特别是GLOBAL关键字的作用。GLOBAL JOIN避免了查询放大问题,但可能受制于网络带宽。讨论了不同场景下,如IN/JOIN操作在分布式环境中的执行策略,强调了使用GLOBAL修饰符减少网络传输次数的重要性。
摘要由CSDN通过智能技术生成

GLOBAL 关键字

ClickHouse 的 HASH JOIN算法实现比较简单:

  • 从right_table 读取该表全量数据,在内存中构建HASH MAP;
  • 从left_table 分批读取数据,根据JOIN KEY到HASH MAP中进行查找,如果命中,则该数据作为JOIN的输出;
ClickHouse 中创建分布式表可以通过以下步骤完成: 1. 首先,在 ClickHouse 集群中的每个节点上配置相同的集群名称。在每个节点的配置文件(通常是 `config.xml`)中,找到 `<remote_servers>` 节点,并确保它的内容在所有节点上是一样的。例如,你可以添加以下配置项: ``` <remote_servers> <cluster> <shard> <replica> <host>node1.example.com</host> <port>9000</port> </replica> <replica> <host>node2.example.com</host> <port>9000</port> </replica> ... </shard> ... </cluster> ... </remote_servers> ``` 其中 `node1.example.com`、`node2.example.com` 等是你集群中的每个节点的主机名和端口号。 2. 然后,在 ClickHouse 中创建一个分布式表。使用以下语法: ```sql CREATE TABLE distributed_table_name ( ... ) ENGINE = Distributed('cluster', 'database', 'table', hash_function); ``` 其中: - `distributed_table_name` 是你要创建的分布式表的名称; - `cluster` 是你在第一步中配置的集群名称; - `database` 是要分布式存储该表数据的数据库名称; - `table` 是要分布式存储该表数据的表名称; - `hash_function` 是用于确定数据行在集群中的哪个节点上存储的哈希函数。它可以是 ClickHouse 支持的任何哈希函数,如 `cityHash64`, `sipHash64`, `murmurHash64` 等。 3. 最后,将数据插入到分布式表中,ClickHouse 会自动将数据分发到集群中的不同节点上存储。 请注意,要成功创建和使用分布式表,你需要确保 ClickHouse 集群的配置正确,并且集群中的各个节点都正常运行和可访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光剑书架上的书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值