如何捕获插入到包含标识列的 Redshift table 中的行数?
How can I capture the number of rows inserted into a Redshift table which contains an identity column?
在 Amazon Redshift 中,我使用以下查询来捕获最后一个查询插入的行数:
SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id();
当我插入包含 IDENTITY 列的 table 时,这种方法似乎不起作用,因为 Redshift 也运行此查询:SELECT * FROM stv_identity_highwater 和将此查询的 ID 用于 pg_last_query_id().
是否有另一种方法来捕获在此场景中插入的行数?
您可以使用 STL_QUERY 系统 table 提取您要统计的查询的 ID。
如果您是系统的唯一用户,您可以假设倒数第二个查询就是您要查找的查询。
为了在具有标识列的 table 中插入值,Redshift 在内部触发查询作为 SELECT * FROM stv_identity_highwater
,因此计数结果为 0
。
加上pg_last_query_id()-1
得到插入计数:
SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id()-1;
不幸的是,这行不通:
SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id()-1;
因为 query_id 在 Redshift 中不是连续的。
单个 table 的检索方式是:
WITH last_queryid_for_table AS (
SELECT query, MAX(si.starttime) OVER () as last_q_stime, si.starttime as stime FROM stl_insert si,
SVV_TABLE_INFO sti WHERE sti.table_id=si.tbl AND sti."table"='$your_table_name'
)
SELECT SUM(rows) FROM stl_insert si, last_queryid_for_table lqt
WHERE si.query=lqt.query AND lqt.last_q_stime=stime
- 当然你应该考虑查询是否失败。如果最后一个结果失败,上述查询将为您提供最新的执行统计信息。
在 Amazon Redshift 中,我使用以下查询来捕获最后一个查询插入的行数:
SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id();
当我插入包含 IDENTITY 列的 table 时,这种方法似乎不起作用,因为 Redshift 也运行此查询:SELECT * FROM stv_identity_highwater 和将此查询的 ID 用于 pg_last_query_id().
是否有另一种方法来捕获在此场景中插入的行数?
您可以使用 STL_QUERY 系统 table 提取您要统计的查询的 ID。
如果您是系统的唯一用户,您可以假设倒数第二个查询就是您要查找的查询。
为了在具有标识列的 table 中插入值,Redshift 在内部触发查询作为 SELECT * FROM stv_identity_highwater
,因此计数结果为 0
。
加上pg_last_query_id()-1
得到插入计数:
SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id()-1;
不幸的是,这行不通:
SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id()-1;
因为 query_id 在 Redshift 中不是连续的。
单个 table 的检索方式是:
WITH last_queryid_for_table AS (
SELECT query, MAX(si.starttime) OVER () as last_q_stime, si.starttime as stime FROM stl_insert si,
SVV_TABLE_INFO sti WHERE sti.table_id=si.tbl AND sti."table"='$your_table_name'
)
SELECT SUM(rows) FROM stl_insert si, last_queryid_for_table lqt
WHERE si.query=lqt.query AND lqt.last_q_stime=stime
- 当然你应该考虑查询是否失败。如果最后一个结果失败,上述查询将为您提供最新的执行统计信息。