amazon-web-services - RedShift 表行在使用另一个表更新后重复
问题描述
主表:
CREATE TABLE ca_ger.cln_trans_base (
store_code VARCHAR(25),
year_week varchar(25),
division VARCHAR(25) encode lzo,
market_share_code VARCHAR(25) encode bytedict,
pon VARCHAR(25) encode lzo,
osp_price REAL encode bytedict
)
diststyle key distkey(store_code)
sortkey(store_code,year_week);
COMMIT;
第二张表:
CREATE TABLE ca_ger.divisions(
store_code VARCHAR(25),
year_week varchar(25),
division VARCHAR(25) encode lzo
)
diststyle key distkey(store_code)
sortkey(store_code,year_week);
COMMIT;
alter table ca_ger.cln_Trans_base
add column division(varchar 25);
连接子句:
update ca_ger.cln_trans_base
set division=b.division
from ca_Ger.cln_trans_base a
join divisions b on a.year_week=b.year_week;
在此之后,我跑vacuum
了analyze
。在此之后,我检查了 stats 表并且行数增加了一倍。
解决方案
扩展@a_horse 的建议,UPDATE 语句不应重复正在更新的表。相反,使用:
UPDATE ca_ger.cln_trans_base a
SET division = b.division
FROM divisions b
WHERE a.year_week = b.year_week;
推荐阅读
- perl - 使用 Perl 的 WWW::Mechanize 发送自定义 cookie(并查看自然设置的 cookie)
- javascript - 如何使用响应式菜单防止正文滚动
- r - 在“R”中使用“ggvenn”在维恩图中丢失集合
- javascript - 存储具有到期日期的会话数据
- swift - SwiftUI:无法访问 TabView 中的编辑模式
- c# - 统一变换位置设置对象中的边界
- kerberos - 如何使用 Discord uid 对 Kerberos 用户进行身份验证?
- smb - 从 smb 转移到下一个云
- mariadb - 当我尝试在 mysql 中创建触发器时出现语法错误
- kubernetes - 如何像 kubernetes 的文档中那样卷曲服务?