Полезно знать

Доступно начиная с dbt v1.12 или в [канале релизов v1 Latest](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md).

# latest\_version\_pointer

### Файл проекта

dbt\_project.yml

```yaml
models:
  <resource-path>:
    +latest_version_pointer:
      enabled: true | false
      alias: <string>
```

### Файл свойств

models/schema.yml

```yaml
models:
  - name: [<model-name>]
    config:
      latest_version_pointer:
        enabled: true | false
        alias: <string>
```

### Конфигурация SQL

models/\<model\_name>.sql

```sql
{{ config(
    latest_version_pointer={
        "enabled": true | false,
        "alias": "<string>"
    }
) }}
```

## Определение

Платформа dbt на базе dbt v2

В dbt v2 параметр `latest_version_pointer` включён по умолчанию для всех моделей с версионированием. Если у модели с версионированием явно задан `alias`, совпадающий с базовым именем модели, может возникнуть ошибка конфликта имён `dbt1005`. Способы её устранения описаны ниже в разделе [Конфликты имён](#naming-collisions).

Параметр `latest_version_pointer` создаёт представление с базовым именем [модели с версионированием](https://docs.getdbt.tech/docs/mesh/govern/model-versions.md) (например, `dim_customers`), которое всегда указывает на объект базы данных, соответствующий последней версии (например, `dim_customers_v2`). Представление создаётся после успешной материализации модели с `is_latest_version = true`; для всех остальных версий его создание пропускается.

Вы также можете включить эту функцию глобально для всех моделей с версионированием, установив флаг [`latest_version_pointer_enabled_by_default`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/latest_version_pointer_enabled_by_default.md) в значение `true` в файле `dbt_project.yml`:

dbt\_project.yml

```yaml
flags:
  latest_version_pointer_enabled_by_default: true
```

`latest_version_pointer` принимает два необязательных вложенных ключа для настройки отдельных моделей:

| Ключ      | Тип     | Значение по умолчанию | Описание                                                                                                                                                                                               |
| --------- | ------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enabled` | boolean | —                     | Включает или отключает представление-указатель для этой модели. Если задан, переопределяет флаг проекта `latest_version_pointer_enabled_by_default`; если не задан, используется значение этого флага. |
| `alias`   | string  | Базовое имя модели    | Пользовательское имя представления-указателя. Переопределяет базовое имя, используемое по умолчанию. Подробнее см. в разделе [Настройка псевдонима](#alias-customization).                             |

## Настройка псевдонима

По умолчанию представление-указатель использует базовое имя модели (например, `dim_customers`). Это можно изменить двумя способами:

* **Для отдельной модели**: задайте `latest_version_pointer.alias` в конфигурации модели.
* **Глобально**: переопределите макрос [`generate_latest_version_pointer_alias`](https://docs.getdbt.tech/docs/build/custom-aliases.md#generate_latest_version_pointer_alias) в своём проекте. Этот макрос работает по тому же принципу, что и [`generate_alias_name`](https://docs.getdbt.tech/docs/build/custom-aliases.md#generate_alias_name).

## Конфликты имён

Чтобы предотвратить конфликты имён, dbt выдаёт ошибку `dbt1005`, если псевдоним последней версии совпадает с именем представления-указателя. В dbt v2, где `latest_version_pointer` включён по умолчанию, эта ошибка может возникать для моделей с явно заданным `alias`, совпадающим с базовым именем модели, даже если вы сами никогда не настраивали указатель.

Например, следующая конфигурация вызовет ошибку `dbt1005`, поскольку и `dim_customers_v2`, и представление-указатель получат имя `dim_customers`:

```text
dbt1005 (Cannot create latest version pointer: the latest version of 'dim_customers' is already aliased to 'dim_customers')
```

```yaml
models:
  - name: dim_customers
    versions:
      - v: 1
      - v: 2
        config:
          alias: dim_customers  # collides with the pointer view name
    config:
      latest_version_pointer:
        enabled: true
```

Чтобы исправить это, выберите один из следующих вариантов:

* [Удалить `alias` (рекомендуется)](#remove-the-alias-recommended)
* [Отключить указатель на последнюю версию для этой модели](#disable-the-latest-version-pointer-for-that-model)
* [Задать уникальный `alias`](#set-a-unique-alias)
* [Переопределить макрос `generate_latest_version_pointer_alias`](#override-the-generate_latest_version_pointer_alias-macro)

#### Удалить `alias` (рекомендуется)

Удалите `alias` из конфигурации последней версии и позвольте автоматически создаваемому указателю обеспечить доступ по этому имени:

```yaml
config:
  alias: dim_customers
```

#### Отключить указатель на последнюю версию для этой модели

Этот подход сразу обеспечивает обратную совместимость с существующими конфигурациями `alias`:

```yaml
        config:
          alias: dim_customers
    config:
      latest_version_pointer:
        enabled: false
```

#### Задать уникальный `alias`

```yaml
        config:
          alias: dim_customers_latest
```

#### Переопределить макрос `generate_latest_version_pointer_alias`

Переопределите макрос [`generate_latest_version_pointer_alias`](https://docs.getdbt.tech/docs/build/custom-aliases.md#generate_latest_version_pointer_alias), чтобы использовать другое правило именования на глобальном уровне:

macros/generate\_latest\_version\_pointer\_alias.sql

```sql
{% macro generate_latest_version_pointer_alias(custom_alias_name=none, node=none) -%}
    {{ node.name ~ "_latest" }}
{%- endmacro %}
```

## Связанная документация

* [Версии моделей](https://docs.getdbt.tech/docs/mesh/govern/model-versions.md)
* [Указание на последнюю версию](https://docs.getdbt.tech/docs/mesh/govern/model-versions.md#pointing-to-the-latest-version)
* [Флаг `latest_version_pointer_enabled_by_default`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/latest_version_pointer_enabled_by_default.md)
* [`versions`](https://docs.getdbt.tech/reference/resource-properties/versions.md)
* [`latest_version`](https://docs.getdbt.tech/reference/resource-properties/latest_version.md)
