跳转到主要内容

何时使用

当存在命名规则相似、列也相近但未启用复制的表时,这种方法会很有用。一个例子是在 system database 中搜索查询日志表中的条目。 query_log 表不是 replicated,且只有在特定节点上执行的查询才会被记录。数据也可能轮转到其他表中。例如,数据可能会被插入到 query_log_0query_log_1 等表中。由于某个节点发生轮转的时间可能与其他节点不同,因此在名称不完全相同的表中查找所需数据就很有帮助。 本质上,我们需要实现类似下面这样的效果,但要使用 ClickHouse 语法: SELECT column1, column2 FROM my_db.my_table_* 为此,我们可以使用 clusterAllReplicas() 来搜索所有节点,并结合 merge() table function,以便使用正则表达式模式搜索多个表。 下面的示例展示了如何查询所有带有 query_log 前缀的表:
请注意,您选择的列必须存在于所查询的每个表中,否则可能会遇到如下错误:
或者,你也可以使用 EXCEPT 子句来排除不同表中可能不存在的列。 示例:
最后修改于 2026年6月12日