Чтобы получить операторы SELECT из ваших ETL:
В начале вашего 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;
;
Чтобы получить список таблиц и других объектов, вы можете затем выполнить EXPLAIN для каждого оператора SELECT, возвращенного выше, и проверьте столбец OBJECTS. (Здесь есть предостережения - например, он основан на логическом плане, а не на фактическом выполнении.)
Если это слишком тяжело, уловка заключается в том, чтобы вставлять метаданные, такие как имена таблиц, в комментарии:
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;
Но при этом будут пропущены таблицы, скрытые в представлениях и функциях.
Надеюсь, это полезно