Snowflake cloud data platform 来自修改行的雪花返回数据

Snowflake cloud data platform 来自修改行的雪花返回数据,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,在PostgreSQL中,有一个概念是在同一查询中返回查询修改的数据 UPDATE products SET price = price * 1.10 WHERE price <= 99.99 RETURNING name, price AS new_price; 更新产品设置价格=价格*1.10 价格这是一个很好的特性。Snowflake没有这个功能,但是您可以打开一个事务,然后进行选择,然后进行更新,达到相同的效果。但是,如果您的目标是记录更改,您可能希望检查更改跟踪--当前

在PostgreSQL中,有一个概念是在同一查询中返回查询修改的数据

UPDATE products SET price = price * 1.10
  WHERE price <= 99.99
  RETURNING name, price AS new_price;
更新产品设置价格=价格*1.10

价格这是一个很好的特性。Snowflake没有这个功能,但是您可以打开一个事务,然后进行选择,然后进行更新,达到相同的效果。但是,如果您的目标是记录更改,您可能希望检查更改跟踪--当前在预览中。

根据示例:更新结果将显示更改的行数,但是您可以预览更改的数据,它使用的计算点数较少。您好@waldente,我将有两个独立运行的应用程序,每个应用程序都需要根据状态获取任务。如果一个应用程序获取一条记录,则这些记录不应被另一个应用程序使用。在pgsql中,我们使用上述方法避免了冲突。有没有其他方法可以通过雪花来实现这一点?嗨,devanathan。一种解决方案是通过算法分割工作,例如,让一个应用程序处理偶数事务,另一个处理奇数事务。这是理想的。另一种方法是添加一个名为KEY的列。修改您的更新,同时将密钥设置为timestamp+app name。使用键检索修改的行。或者,最后,如果无法向表中添加列,请创建一个包含单行的“锁定表”,并让两个应用程序尝试更新事务中的行。一个将阻止,直到另一个提交。(最不理想!)感谢@waldente的宝贵建议。我有多个工人,工人是动态创建的。嗯……消息队列适合这里吗?这可以通过让一个节点为工作节点馈电来避免争用。如果争用概率较低,则可以考虑乐观锁定。最后,您可以处理雪花外部的锁定。请记住,雪花it没有针对密集的事务性操作进行优化。是的,@waldente。我试图在数据库(可能是Redis)之外处理锁定策略。