亚马逊红移中的上次更新查询计数
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_SESSIONS
、STL_QUERY
和 @ 来实现这一点987654325@。有一篇很棒的博客文章 here 关于如何构建查询。
希望这会有所帮助!
【讨论】:
以上是关于亚马逊红移中的上次更新查询计数的主要内容,如果未能解决你的问题,请参考以下文章