Перейти к основному содержимому

Ошибка: Целевая таблица снимка не является таблицей снимков

Если вы видите следующую ошибку при попытке выполнить команду snapshot:

Целевая таблица снимка не является таблицей снимков (отсутствуют dbt_scd_id, dbt_valid_from, dbt_valid_to)

Убедитесь, что вы случайно не заставили ваш снимок вести себя как материализация таблицы, установив его конфигурацию materialized в значение table. До версии dbt 1.4 было возможно создать снимок следующим образом:

{% snapshot snappy %}
{{ config(materialized = 'table', ...) }}
...
{% endsnapshot %}

dbt обрабатывал снимки как таблицы (выполняя команды create or replace table ...) без предупреждения, вместо того чтобы фактически создавать снимки данных (SCD2 через команды insert / merge). При обновлении до версий dbt 1.4 и выше, dbt теперь выдает ошибку разбора (вместо того чтобы молча обрабатывать снимки как таблицы), которая гласит:

Снимок должен иметь значение materialized 'snapshot'

Это указывает на необходимость изменить конфигурацию materialized на snapshot. Но когда вы вносите это изменение, вы можете столкнуться с сообщением об ошибке, указывающим на отсутствие таких полей, как dbt_scd_id. Эта ошибка возникает потому, что ранее, когда dbt обрабатывал снимки как таблицы, он не включал необходимые мета-поля снимков в вашу целевую таблицу. Поскольку эти мета-поля отсутствуют, dbt правильно определяет, что вы пытаетесь создать снимок в таблице, которая на самом деле не является снимком.

Когда это происходит, вам нужно начать с нуля — повторно создать снимок ваших исходных данных, как если бы это было в первый раз, удалив ваш "снимок", который не является настоящей таблицей снимков. Затем dbt snapshot создаст новый снимок и вставит мета-поля снимка, как и ожидалось.

0