我希望能够将分布式 ReplicatedMergeTree 中的选择查询结果临时存储到内存表中以运行一些聚合。我决定使用“内存”引擎,每个节点的结果将在本地缓存。我需要一个“分布式”内存表,通过阅读文档并不清楚它是否支持。我试了一下。
我能够在集群中创建内存表:
如果不存在则创建表 table_local ON CLUSTER '{cluster}' { ...} ENGINE = 内存
我希望能够在此之上使用分布式表:
如果不存在则创建表 table_distributed ON CLUSTER '{cluster}' AS table_local ENGINE = Distributed('{cluster}', default, table_local, rand())
此命令成功完成。我必须使用默认值,因为我不确定内存表的正确值是什么。我还可以将数据插入“table_distributed”。
INSERT INTO table_distributed select * from
但是后续的“选择”查询本身只能从其中一个节点成功。如果我将查询发送到前面的负载均衡器,它就会失败。如果我将其发送到一个特定的 Pod 地址,就会成功。有人可以澄清这是否受支持吗?如果我想对表中的一些过滤结果运行一堆聚合,这似乎是一个有用的情况。我也尝试过临时表,但不起作用。
https://clickhouse.com/docs/en/engines/table-engines/special/memory
文档说数据不会跨节点复制。这能回答你的问题吗?