Redshift - 更新 Redshift DB 中的特定列

Posted

技术标签:

【中文标题】Redshift - 更新 Redshift DB 中的特定列【英文标题】:Redshift - Updating a specific column in Redshift DB 【发布时间】:2018-07-31 10:41:43 【问题描述】:

我有一个存储销售数据的销售表。该表每天更新一次(增量更新)。我正在尝试更新此表中的一列以计算自 sale_date 以来的老化。

update sales set aging = (select CASE WHEN sale_date > current_date-28 AND sale_date < current_date -14 THEN '2 - 4 Weeks Ago'
                    WHEN terminated_at > current_date-14 AND terminated_at < current_date THEN '0 - 2 Weeks Ago'
                    WHEN terminated_at < current_date-28 THEN '4+ Weeks Ago' ELSE 'Unknown' end as aging from sales) ;

我收到无效操作:无效查询错误。谁能帮我找出我哪里出了问题。

我正在使用 Amazon Redshift 数据库。

谢谢。

【问题讨论】:

【参考方案1】:

您可能只需在更新的 RHS 端删除 select

UPDATE sales
SET aging = CASE WHEN sale_date > current_date - 28 AND sale_date < current_date - 14
                 THEN '2 - 4 Weeks Ago'
                 WHEN terminated_at > current_date - 14 AND terminated_at < current_date
                 THEN '0 - 2 Weeks Ago'
                 WHEN terminated_at < current_date - 28
                 THEN '4+ Weeks Ago'
                 ELSE 'Unknown' END;

但是,我觉得也许您不应该将这些信息存储在您的 SQL 表中。相反,您可以在需要时使用相同的CASE 表达式来生成此输出。我之所以这么说是因为当您添加新记录并因此添加新日期信息时,必须重新计算此计算列,这可能会很昂贵。

【讨论】:

感谢@tim 这有帮助。我这样做的原因是因为当前表每天都会增量更新,但老化值是错误的,因为它们没有针对过去完成的销售进行更新。鉴于当前的更新结构,我相信这确实是最好的选择。

以上是关于Redshift - 更新 Redshift DB 中的特定列的主要内容,如果未能解决你的问题,请参考以下文章

Redshift - 将文本列插入数据库表的问题

如何从 mac 连接到 aws Redshift db

如何使用从 s3 到 redshift db 的复制命令解决语法错误

对于 Redshift DB,Hibernate 期望 Long 但找到 BigInteger

即使 play.ap.db.DB 可以为同一个驱动程序执行此操作,也无法使用驱动程序连接到 Redshift 数据库

在事务中更新到 Redshift