Redshift中sys_query_history与stl_querytext关联查询方法咨询
Redshift中sys_query_history与stl_querytext的正确关联方式
要精准关联这两张表,核心是使用**sys_query_history.query_id和stl_querytext.queryid**作为关联键,这是Redshift为每个查询分配的唯一标识,能确保一对一匹配。之前用事务ID或会话ID关联的问题在于,同一事务/会话下可执行多个查询,无法定位到具体某一条查询。
示例查询语句
SELECT sqh.status, sqh.result_cache_hit, sqh.start_time, sqh.end_time, sqh.error_message, -- 拼接stl_querytext中拆分的SQL片段,得到完整查询文本 LISTAGG(sqt.querytext, '') WITHIN GROUP (ORDER BY sqt.sequence) AS full_query_text FROM sys_query_history sqh INNER JOIN stl_querytext sqt ON sqh.query_id = sqt.queryid -- 可根据需求添加时间范围等过滤条件 WHERE sqh.start_time >= CURRENT_DATE - 7 GROUP BY sqh.query_id, sqh.status, sqh.result_cache_hit, sqh.start_time, sqh.end_time, sqh.error_message ORDER BY sqh.start_time DESC;
关键说明
- 关联逻辑:
query_id(sys_query_history)和queryid(stl_querytext)是Redshift为每个查询生成的唯一标识,直接关联就能精准匹配查询的执行元数据和对应的SQL文本。 - 完整SQL拼接:stl_querytext会将过长的SQL拆分成多条记录(每条对应一个片段),
sequence字段标记了片段的顺序,使用LISTAGG按顺序拼接即可得到完整的查询语句。 - 过滤与分组:通过
GROUP BY聚合同一query_id下的SQL片段,同时保留sys_query_history中的核心字段;可根据需求添加过滤条件缩小查询范围。
内容的提问来源于stack exchange,提问作者abhishek sinha
相关产品推荐
相关产品推荐

