можем ли мы преобразовать операторы delete SQL в DBT?

#sql-server #dbt

#sql-сервер #dbt

Вопрос:

Я пытаюсь создать модель DBT из SQL, в которой есть операторы delete на основе предложения where.

Может ли кто-нибудь, пожалуйста, подсказать мне, как преобразовать приведенную ниже инструкцию SQL delete в модель DBT?

«‘ удалить имя_таблицы, где условие;

»’

Спасибо

Комментарии:

1. Чтобы хорошо ответить на этот вопрос, было бы полезно понять еще немного контекста. В чем причина желания удалить записи?

2. Я думаю, мы можем написать запрос выбора, где нет (укажите условие), это исключит записи

3. @SQLPro docs.getdbt.com/docs/building-a-dbt-project/building-models

4. Я прокомментировал ответ, но также оставил это здесь: discourse.getdbt.com/t /…

Ответ №1:

Существует несколько вариантов выполнения инструкций DELETE в dbt:

  • добавьте оператор DELETE в качестве pre_hook или post_hook для существующей модели
  • создайте макрос операции для выполнения инструкции DELETE независимо от модели

Обратите внимание, что, если ваш тип материализации модели не является «инкрементным», нет особого смысла удалять из целевого объекта модели.

Отказ от ответственности: я давно не использую dbt, поэтому вполне могут быть лучшие способы сделать это или причины не делать этого вообще.
Не уверен, каков ваш вариант использования, но мне приходилось использовать удаления при модернизации существующей логики хранилища данных в dbt. Если вы начинаете с нуля с dbt, то, вероятно, попробуйте избежать дизайна, который требует удаления данных.

Комментарии:

1. Технически это то, что вы МОГЛИ бы сделать, но, вероятно, вам не следует этого делать. Удаление записей противоречит структуре dbt ELT. Любой, кто считает, что ему нужно это решение, должен ознакомиться с точкой зрения dbt, начиная с этой статьи: discourse.getdbt.com/t /.

2. Это чрезвычайно узкий взгляд на потенциальное использование dbt.

3. На самом деле это точка зрения разработчиков dbt… Делайте что хотите, но инструменты часто работают лучше всего, когда используются по назначению.

4. Разработчики отвертки намереваются использовать ее для крепления винтов, но я также могу использовать ее, чтобы открыть банку с краской. Я могу сказать по опыту, что реальность выпуска инструментов на волю заключается в том, что люди всегда найдут им применение, которое разработчики не предусмотрели, это не значит, что это неправильное использование. Конечно, если кто-то запускает проект с данными greenfields с нуля, имеет смысл придерживаться рекомендуемых лучших практик разработчика dbt, насколько это возможно, но реальный мир не всегда настолько приспособлен.

Ответ №2:

Мне нужно было реализовать удаления в соответствии с требованиями CCPA к удалению. Наш необработанный уровень — это ежедневное удаление и восстановление, поэтому, если строка не существует в raw, ее нужно будет удалить в нижестоящих таблицах.

Уровень этапа — это набор представлений, которые переименовывают и преобразуют необработанные таблицы, а также создают суррогатный ключ as sha1(raw_table_business_key) . Pre_hook для таблиц EDW с постепенной загрузкой — это что-то вроде:

 delete from {{ this }} where skey not in 
(select skey from {{ ref('stage_view') }})
  

Да, это абсолютно повторяет историю.