获取流程中涉及的表列表
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 隐藏在视图和函数中的内容。
希望对您有所帮助
我想 运行 一系列查询(几百个 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 隐藏在视图和函数中的内容。
希望对您有所帮助