亚马逊红移中的上次更新查询计数

Posted

技术标签:

【中文标题】亚马逊红移中的上次更新查询计数【英文标题】:Last update query count in amazon redshift 【发布时间】:2017-01-04 09:59:44 【问题描述】:

有没有办法计算亚马逊红移中受 SQL 更新查询影响的最后行数?

类似于 PG_LAST_COPY_COUNT() 的函数来计算亚马逊红移中的最后一个复制计数。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

这应该提供信息

SELECT CASE
         WHEN d.relname IS NOT NULL THEN d.relname
         ELSE i.relname
       END TableName,
       CASE
         WHEN nvl (Deleted_Rows,0) = 0 THEN nvl (Inserted_Rows,0)
         ELSE 0
       END Inserted_Rows,
       CASE
         WHEN nvl (Deleted_Rows,0) = nvl (Inserted_Rows,0) THEN nvl (Inserted_Rows,0)
         ELSE 0
       END Updated_Rows,
       CASE
         WHEN nvl (Inserted_Rows,0) = 0 THEN nvl (Deleted_Rows,0)
         ELSE 0
       END Deleted_Rows
FROM (SELECT query,
             relname,
             SUM(ROWS) Deleted_Rows
      FROM stl_delete sd
        JOIN pg_class t ON t.oid = sd.tbl
      GROUP BY query,
               relname) d
  FULL JOIN (SELECT query,
                    relname,
                    SUM(ROWS) Inserted_Rows
             FROM stl_insert si
               JOIN pg_class t ON t.oid = si.tbl
             GROUP BY query,
                      relname) i ON i.query = d.query
WHERE CASE WHEN d.query IS NOT NULL THEN d.query ELSE i.query END = pg_last_query_id();

【讨论】:

Updated_Rows 为何以及如何最终来自 stl_delete 和 stl_insert? 在redshift中,后台没有更新操作。所有更新都作为删除要更新的记录并将更新的记录作为新记录插入 我相信你的话,但是有没有官方文档提到这个主题?我找不到任何证据证明你说的是真的。我坚持这一点,因为我需要有证据支持我的流程。 我已经根据经验验证了您所说的是真实的,但还是有一些备份文档会很好! 查询有错误,不必获取SUM(ROWS)! redshift 为查询分配的每个切片记录几条记录,但 rows 列获取处理的总行数,因此您应该只取其中一个值而不是总和。【参考方案2】:

您是对的,没有等效的 PG_LAST_COPY_COUNT() 用于从插入/更新/删除中捕获受影响行的最后数量,但是您可以通过使用系统表 STV_SESSIONSSTL_QUERY 和 @ 来实现这一点987654325@。有一篇很棒的博客文章 here 关于如何构建查询。

希望这会有所帮助!

【讨论】:

以上是关于亚马逊红移中的上次更新查询计数的主要内容,如果未能解决你的问题,请参考以下文章

使用字符串函数反序列化亚马逊红移中的 php 对象

亚马逊红移中的 SQL 正则表达式 substr 函数

如何从亚马逊红移中的字符串中删除非数字字符(句号“。”除外)

从亚马逊红移中选择最大嵌套 ID

aws红移中的ILIKE和NOT ILIKE与总数不同

如何将oracle sql复制到亚马逊redshift