You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中筛选QUERY_HISTORY表中的特定DML类查询?

从QUERY_HISTORY表筛选指定操作的查询语句及新手建议

一、查询语句示例

假设你用的是带有QUERY_HISTORY系统视图的环境(比如Snowflake),下面是筛选你自己执行过的指定操作查询的SQL:

SELECT QUERY_TEXT, START_TIME, USER_NAME
FROM QUERY_HISTORY
WHERE USER_NAME = '你的用户名' -- 替换成你实际的用户名
  AND LOWER(QUERY_TEXT) REGEXP '^(update|insert|alter|rename|merge|delete|truncate|drop|copy|select|create)'
ORDER BY START_TIME DESC;

语句说明:

  • USER_NAME = '你的用户名':确保只筛选你自己执行的查询,避免混入其他人的操作记录。
  • LOWER(QUERY_TEXT) REGEXP ...:把查询文本转成小写后用正则匹配,避免因为SQL大小写不一导致漏筛或误筛。正则里的^表示匹配语句开头,能避免误抓那些查询内容里包含关键词的情况(比如SELECT * FROM UPDATE_LOG这类语句不会被误捞)。
  • ORDER BY START_TIME DESC:按执行时间倒序排列,方便你优先查看最近的操作。

二、给新手的实用建议

  • 先确认表结构:不同环境的QUERY_HISTORY字段可能有差异,比如有的叫QUERY_STRING而非QUERY_TEXT,有的用EXECUTION_USER代替USER_NAME。可以先执行DESCRIBE TABLE QUERY_HISTORY;(对应环境的查看表结构命令),确认字段名后再调整语句。
  • 测试正则匹配:先去掉WHERE条件,查几条样本数据,看看你的查询语句开头的格式(比如有没有带注释或空格),再调整正则。比如如果有的查询开头有空格,可以把正则改成^\\s*(update|insert...),匹配开头的空格加关键词。
  • 分步骤调试:不要一下子写完整的WHERE条件,先查所有自己的查询,确认能拿到数据后,再加操作类型的过滤条件,这样更容易排查问题。
  • 区分DML和DDL:你列的操作里,SELECT、INSERT、UPDATE、DELETE、MERGE、COPY属于DML(数据操作语言),CREATE、ALTER、DROP、RENAME、TRUNCATE属于DDL(数据定义语言),如果后续只想看其中一类,直接修改正则里的关键词列表就行。
  • 保存常用语句:把这个筛选语句存成个人视图或者记在笔记里,下次要用直接调用,不用重复编写。
  • 检查权限:如果执行查询后没有返回数据,大概率是没有访问QUERY_HISTORY的权限,找管理员申请对应权限即可。

内容的提问来源于stack exchange,提问作者SnowPablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:30:06