从雪花历史中的query_text中提取表
Posted
技术标签:
【中文标题】从雪花历史中的query_text中提取表【英文标题】:extract table from query_text in history in snowflake 【发布时间】:2021-06-01 12:39:41 【问题描述】:我必须知道 snowflake 中查询最多的表,所以想从 Snowflake_query_history 表中的 query_text 中提取表名。有没有办法在 SQL 中做到这一点。
【问题讨论】:
在***.com/a/64343564/132438查看我之前的回答 【参考方案1】:您可以使用ACCESS_HISTORY 视图来代替解析query_text
。
查询可能如下所示:
SELECT f1.value:"objectId" AS table_id, COUNT(*) AS cnt
FROM "SNOWFLAKE"."ACCOUNT_USAGE".access_history
,LATERAL flatten(base_objects_accessed) f1
WHERE f1.value:"objectDomain"::string='Table'
AND query_start_time >= dateadd('day', -30, current_timestamp()) -- last 30 days
GROUP BY table_id
ORDER BY cnt DESC;
使用TABLE_ID
列作为查找,可以在SNOWFLAKE.ACCOUNT_USAGE.TABLES 中找到实际的表名。
【讨论】:
只是添加使用 ACCOUNT_HISTORY 视图的警告。这似乎只有在您拥有 Snowflake Enterprise 而不是 Standard 时才可用。【参考方案2】:另请参阅:Snowflake - View what tables and columns are queried the most
以高精度做到这一点是相当困难的,但如果可以接受合理接近,那么以下可能就足够了。
此查询不会处理连接、联合、子查询、多个 CTE 等 - 这将很难用 REGEXP 完成,并且更适合通过 Snowflake Python 连接器在 Python 中完成,例如pglast
。
select REGEXP_SUBSTR(query_text, ' from ([^\\ ]*)', 1, 1, 'ie', 1) table_name,count(*) query_count from "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" group by 1 order by 2 desc;
TABLE_NAME QUERY_COUNT
table_a 95
"SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" 5
【讨论】:
以上是关于从雪花历史中的query_text中提取表的主要内容,如果未能解决你的问题,请参考以下文章