ClickHouse Merge引擎

Merge引擎与MergeTree引擎一点儿关系没有,它类似于union all的功能,将不同引擎表中的数据union到一起.
准备数据:

CREATE TABLE mydatabase.mergeTest1
(`id` Int8, `name` String)
ENGINE = MergeTree
ORDER BY id;
insert into mergeTest1 values(1,'zhangsan');
create table mydatabase.mergeTest2(id Int16,name String)
engine=Log;
insert into mergeTest2 values(2,'lisis');

如上,id列的类型略微不一样,表引擎完全不一样.
创建Merge引擎表

CREATE TABLE mydatabase.merge
(
    `id` Int8,
    `name` String
)
ENGINE = Merge('mydatabase', 'mergeTest*')

Merge(args1,args2)
args1:指明库名
args2:指明表明,支持正则表示,上面是以mergeTest开头的所有表.
执行查询:

 select * from merge;

┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name──┐
│  2 │ lisis │
└────┴───────┘

注意,如果mergeTest1与mergeTest2的字段名不一样将会报错,但是字段名一样而类型不一样,并且类型可以自动转化的情况下,不会报错.

另外,Merge引擎有一列隐藏字段 _table,记录的是数据来源的表:

 select *,_table from merge;
┌─id─┬─name─────┬─_table─────┐
│  1 │ zhangsan │ mergeTest1 │
└────┴──────────┴────────────┘
┌─id─┬─name──┬─_table─────┐
│  2 │ lisis │ mergeTest2 │
└────┴───────┴────────────┘

所以merge引擎可以根据_table来过滤,如:

select * from merge where _table ='mergeTest1';

另外还有一种表函数merge(‘db’,‘tb’);

select * from merge('mydatabase','mergeTest*');

┌─id─┬─name─────┐
│  1 │ zhangsan │
└────┴──────────┘
┌─id─┬─name──┐
│  2 │ lisis │
└────┴───────┘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值