Краткий прогон:
Ваш подход
Вы уже нашли жизнеспособное решение, и ваше беспокойство по поводу надежности последней функции id запроса понятно. Сеансы процедур изолированы, поэтому функция last_query_id () будет изолирована только от операторов, выполняемых в этой процедуре. Возможно, нет необходимости использовать процедуру, но мне лично нравится, что они позволяют создавать абстракции многократного использования.
Другой подход
Альтернативой, если вам не нравится подход, который вы используете, было бы создание одной таблицы с одним столбцом данных VARIANT плюс поддерживаемые столбцы метаданных этапа. по одной гигантской трубе, и вы можете поддерживать набор материализованных представлений над этой таблицей, которые будут фильтровать, преобразовывать варианты полей в столбцы и очищать, в зависимости от ситуации.
Существуют некоторые преимущества:
- проще: интеграция новых префиксов для этапа требует только дополнительного материализованного представления, а не дополнительной трубы + задача
- больше контроля: вы сможете напрямую и автоматически работать с данными в необработанном виде, а не загружать их в таблицу и проверять ее. Это означает, что вы можете выполнять проверки качества данных, метаданных и очистки.
- ремонтопригоден: использование материализованных представлений над неизменным источником означает, что вы можете в любое время изменить логи c и выполнить полную обратную засыпку без особых усилий.
Long Run:
Интеграция уведомлений позволяет снежинке прослушивать (и, возможно, уведомлять в будущем, если пожелают боги дорожной карты) внешние системы обмена сообщениями. На данный момент поддерживается только Azure, поэтому он не будет работать для вашего случая, но следите за ним в течение следующих нескольких месяцев - я думаю, можно с уверенностью предположить, что мы увидим, что эта функция будет поддерживать AWS и в конечном итоге станет доступен более прямой и лаконичный способ реализации исходного решения.