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

Конфигурации Microsoft SQL Server

Материализации

Эфемерная материализация не поддерживается, так как T-SQL не поддерживает вложенные CTE. Она может работать в некоторых случаях, когда вы работаете с очень простыми эфемерными моделями.

Таблицы

Таблицы по умолчанию будут материализованы как таблицы с колонковым хранилищем. Это требует SQL Server 2017 или новее для локальных экземпляров или уровня обслуживания S2 или выше для Azure.

Это поведение можно отключить, установив параметр конфигурации as_columnstore в значение False.

models/example.sql
{{
config(
as_columnstore=false
)
}}

select *
from ...

Seeds

По умолчанию, dbt-sqlserver будет пытаться вставлять seed файлы пакетами по 400 строк. Если это превышает лимит в 2100 параметров SQL Server, адаптер автоматически ограничит до максимально безопасного значения.

Чтобы установить другое значение по умолчанию для seed, вы можете установить переменную max_batch_size в конфигурации вашего проекта.

dbt_project.yml
vars:
max_batch_size: 200 # Любое целое число, меньшее или равное 2100, подойдет.

Снимки

Столбцы в исходных таблицах не могут иметь никаких ограничений. Если, например, любой столбец имеет ограничение NOT NULL, будет выдана ошибка.

Индексы

Вы можете указать индексы, которые будут созданы для вашей таблицы, указав post-hooks, вызывающие специально разработанные макросы.

Доступны следующие макросы:

  • create_clustered_index(columns, unique=False): columns — это список столбцов, unique — это необязательный булевый параметр (по умолчанию False).
  • create_nonclustered_index(columns, includes=columns): columns — это список столбцов, includes — это необязательный список столбцов для включения в индекс.
  • drop_all_indexes_on_table(): удаляет текущие индексы на таблице. Имеет смысл только если модель инкрементная.

Некоторые примеры:

models/example.sql
{{
config({
"as_columnstore": false,
"materialized": 'table',
"post-hook": [
"{{ create_clustered_index(columns = ['row_id', 'row_id_complement'], unique=True) }}",
"{{ create_nonclustered_index(columns = ['modified_date']) }}",
"{{ create_nonclustered_index(columns = ['row_id'], includes = ['modified_date']) }}",
]
})

}}

select *
from ...

Гранты с автоматическим предоставлением

В dbt 1.2 была введена возможность предоставления/отзыва доступа с использованием параметра конфигурации grants. В dbt-sqlserver вы можете дополнительно установить auto_provision_aad_principals в значение true в конфигурации вашей модели, если вы используете аутентификацию Microsoft Entra ID с базой данных Azure SQL или Azure Synapse Dedicated SQL Pool.

Это автоматически создаст принципала Microsoft Entra ID в вашей базе данных, если он еще не существует. Обратите внимание, что принципалы должны существовать в вашем Microsoft Entra ID, это просто делает их доступными для использования в вашей базе данных.

Принципы не удаляются, когда они удаляются из конфигурации грантов.

dbt_project.yml
models:
your_project_name:
auto_provision_aad_principals: true

Разрешения

Следующие разрешения требуются для пользователя, выполняющего dbt:

  • CREATE SCHEMA на уровне базы данных (или вы можете создать схему заранее)
  • CREATE TABLE на уровне базы данных (или в собственной схеме пользователя, если схема уже создана)
  • CREATE VIEW на уровне базы данных (или в собственной схеме пользователя, если схема уже создана)
  • SELECT на таблицах/представлениях, используемых в качестве источников dbt

Три вышеуказанных разрешения CREATE требуются на уровне базы данных, если вы хотите использовать тесты или снимки в dbt. Вы можете обойти это, создав схемы, используемые для тестирования и снимков, заранее и предоставив правильные роли.

Макросы для работы с несколькими базами данных

Следующие макросы в настоящее время не поддерживаются:

  • bool_or
  • array_construct
  • array_concat
  • array_append

dbt-utils

Многие dbt-utils поддерживаются, но требуют установки пакета dbt tsql_utils.

0