vertica快速更新列值

假设有两张表a和b,需要把a的值复制到b表上,一般的做法如下:

update b set value=(select a.value from a where a.id=b.id)

在vertica上执行这样的update语句是很慢的,有一个推荐的解决方案,是使用set using 和refresh_columns机制。具体如下

create table a (
    id int,
    value varchar(100);
);

create table b (
    id int,
    value varchar(100) set using(select a.value from a where a.id=b.id)
);

select refresh_columns('b', 'value', 'REBUILD');

如果表有分区,执行 REFRESH_COLUMNS 的时候还可以加两个参数,缩小刷新分区值得范围。

参考文档:

https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Functions/VerticaFunctions/REFRESH_COLUMNS.htm#REBUILDModeRestrictions

posted @ 2020-02-12 15:55  卡卡西村长  阅读(1327)  评论(0)    收藏  举报