如何在同一数据库中查询多个数据库?

3bygqnnd  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(348)

我有一个clickhouse数据库。它包含多个数据库。数据库中的表是相同的。
例如,db1有表“table1”,db2也有表“table1”(这里的数据库不同,表也不同,但它们有相同的模式,并且包含相似类型的信息)。
有没有一种方法可以让我编写一个查询,以便从所有不同的数据库的所有不同的表中获得最佳的信息?目前我正在逐个查询每个表,并在它们之间进行联合。

yiytaume

yiytaume1#

您可以使用合并引擎设置一个特殊的表(不要与mergetree混淆)。查询它也会这样做 UNION ALL 透明的。但它不支持跨多个数据库,因此最终可能会有多个数据库,或者将表移到一个数据库中。

ergxz8rk

ergxz8rk2#

我建议再创建一个数据库:

create database <your_db_name> on cluster <your_cluster_name>;

然后为每个现有数据库创建一个合并表:

CREATE TABLE <your_db_name>.<merge_table_name> On cluster <your_cluster_name> (<fields list you need to deal with>)  ENGINE=Merge(<existing_db_name>, '<regex>');

为每个合并表创建一个视图(使用视图可以执行任何聚合函数、分组依据等):

CREATE VIEW <your_db_name>.view_<merge_table_name> on cluster <your_cluster_name> (<list of fields>) AS SELECT <list of fields> FROM <your_db_name>.<merge_table_name>;

最后,创建一个“结果”合并表,合并新创建的所有视图:

CREATE TABLE <your_db_name>.<result_table_name> on cluster <your_cluster_name> (<list of fields>)  ENGINE=Merge(<your_db_name>, '<regex>');

命名表和视图的方式应使正则表达式与您所需要的匹配,并确保避免循环。

相关问题