获取流程中涉及的表列表

Get a list of tables involved in a process

我想 运行 一系列查询(几百个 ETL 语句)并获得从中选择的表的列表。有没有办法在雪花中做到这一点?我想知道我是否可以将我的连接设置为某个 role/warehouse 并以这种方式或类似方式削减信息,但我不确定有什么巧妙的方法可以获取此信息。

谢谢!

要从您的 ETL 中获取 SELECT 语句

在您的 ETL 开始时,设置 QUERY_TAG 或保存 SESSION_ID:

alter session set query_tag='MY_ETL'; -- Tag queries

select current_session(); -- Or save this SESSION_ID

然后过滤历史 QUERY_TAG:

select * from table(information_schema.query_history());

select query_text from table(result_scan(-1))
where query_type='SELECT' and query_tag='MY_ETL'
order by start_time;

或 SESSION_ID:

select * from table(information_schema.query_history_by_session(session_id=>298348393433));

select query_text from table(result_scan(-1))
where query_type='SELECT' 
order by start_time;
;

要获取 tables 和其他对象的列表,然后可以对上面返回的每个 SELECT 语句执行 EXPLAIN,并检查 OBJECTS柱子。 (这有一些注意事项——例如,它基于逻辑计划,而不是实际执行。)

如果这太重了,一个技巧是将 table 名称等元数据注入评论:

select /* metadata here */ 1;

然后从QUERY_TEXT中提取元数据:

select * from table(information_schema.query_history());

select regexp_substr(query_text, '/\*(.*?)\*/', 1, 1, 'e') metadata, *  
from table(result_scan(-1))
where query_type='SELECT' and query_tag='MY_ETL'
order by start_time desc;

但这会错过 table 隐藏在视图和函数中的内容。


希望对您有所帮助