clickhouse实现联表更新

clickhouse是不支持联表更新的

现实现方法有两种

方法一:假如更新表格的表引擎是ENGINE = ReplacingMergeTree那么就可以用join进行表连接,然后将拼好得字段插入表中,加final查询或者进行OPTIMIZE (OPTIMIZE 语句会引发对数据的大量读写)就会发现查询的就是刚刚插入的那一条

注意:只改变要更改的那个字段,别的字段保持原状

方法二:借助join表引擎

示例:

根据id,将表2的colum2,更新到表1的colum2

表1数据

表2数据:

步骤一:

建表

CREATE TABLE [IF NOT EXISTS] [db.]join表 [ON CLUSTER cluster]

(

id字段,

colum字段,

) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])

join_strictness:有两种类型ALL、ANY

ALL是在关联表在关联另一个表的时候,假如关联表存在重复数据,

那么只会关联其中一条,ANY不管重不重复,都会关联

注意:假如要实现联表更新,那么这里的类型就只能是ANY

join_type:所有标准 SQL JOIN 支持类型:

INNER JOIN,只返回匹配的行。

LEFT OUTER JOIN,除了匹配的行之外,还返回左表中的非匹配行。

RIGHT OUTER JOIN,除了匹配的行之外,还返回右表中的非匹配行。

FULL OUTER JOIN,除了匹配的行之外,还会返回两个表中的非匹配行。

CROSS JOIN,产生整个表的笛卡尔积, “join keys” 是 不 指定。

注:JOIN 没有指定类型暗指 INNER. 关键字 OUTER 可以安全地省略。

ClickHouse中提供的其他联接类型:

LEFT SEMI JOIN 和 RIGHT SEMI JOIN,白名单 “join keys”,而不产

生笛卡尔积。

LEFT ANTI JOIN 和 RIGHT ANTI JOIN,黑名单 “join keys”,而不产

生笛卡尔积。

LEFT ANY JOIN、RIGHT ANY JON和INNER ANY JOIN

ASOF JOIN and LEFT ASOF JOIN

k1[, k2, ...]:关联表的关键字段,假如有多个关联字段那么就直接用逗号隔开就好,例如ENGINE = Join(join_strictness, join_type, k1, k2)

步骤二:

将表2的表的数据插入到这个join表中

insert into join表 select * from 表2 where 表2条件

步骤三:

将表2数据更新到表1

joinGet(join表',‘更改的值',表1的连接字段) 获取更改数据

查询核对脚本

select id,colum1,colum2,joinGet(join表',‘colum2',id);

结果如下:

alter table 表1 update mpnid=joinGet(join表',‘colum2',id) where 表1的条件;

更新结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值