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>');
2条答案
按热度按时间yiytaume1#
您可以使用合并引擎设置一个特殊的表(不要与mergetree混淆)。查询它也会这样做
UNION ALL
透明的。但它不支持跨多个数据库,因此最终可能会有多个数据库,或者将表移到一个数据库中。ergxz8rk2#
我建议再创建一个数据库:
然后为每个现有数据库创建一个合并表:
为每个合并表创建一个视图(使用视图可以执行任何聚合函数、分组依据等):
最后,创建一个“结果”合并表,合并新创建的所有视图:
命名表和视图的方式应使正则表达式与您所需要的匹配,并确保避免循环。