【问题标题】:Does adding sort keys to Redshift table speed up delete statements?向 Redshift 表添加排序键会加速删除语句吗?
【发布时间】:2019-08-22 14:07:14
【问题描述】:

我在 Redshift 中有一个非常大的表,其中大约 3600 万行使用复合键。我正在尝试每半分钟执行一次大规模删除 + 复制(S3 复制命令)操作。我们有一个 ETL 管道,它试图接近实时地更新我们的数据仓库表。目前我正在使用 psycopg2 的executemany 方法来删​​除行,这个方法基本上是批处理我的删除查询并执行许多小操作

delete from table where col1=val1 and col2=val2 ...

在 for 循环中(我可能过度简化了实现)。如果我更改我的表以使复合键成为排序键,这会加快我的删除速度吗?

【问题讨论】:

  • “复合键”是什么意思?您指的是 SORTKEY 吗?
  • @JohnRotenstein 我知道 Redshift 不会强制执行主键/复合键约束,但我正在这样做。 “复合键”是指可用于唯一标识表中单个记录的多个列。我的想法是希望将这些列变成排序键,我想这个想法没有多大意义......

标签: python-3.x amazon-web-services amazon-redshift psycopg2 sql-delete


【解决方案1】:

在 Redshift 表上使用 DELETE 不是很好。它只是将行标记为已删除,但将数据保留到将来VACUUM

有时最好执行CREATE TABLE AS 来提取所有行除了要删除的行。这将创建一个新表,以最佳方式存储,没有任何已删除的行。

听起来您可能正在尝试实现 UPSERT 功能。如果是这样,请参阅:Use a Staging Table to Perform a Merge (Upsert) - Amazon Redshift

每半分钟对 36M 行表执行一次操作可能不适合在 Redshift 中执行。它针对从 S3 加载和查询进行了优化,而不是运行删除/插入语句。

【讨论】:

猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
相关资源
最近更新 更多