Конфигурации SingleStore
Стратегии материализации инкрементальных моделей
Конфигурация incremental_strategy управляет тем, как dbt строит инкрементальные модели. В настоящее время SingleStoreDB поддерживает только конфигурацию delete+insert.
Инкрементальная стратегия delete+insert направляет dbt следовать двухэтапному инкрементальному подходу. Сначала она идентифицирует и удаляет записи, отмеченные в блоке is_incremental(). Затем эти записи повторно вставляются.
Оптимизация производительности
Документация по проектированию физической схемы базы данных SingleStore будет полезна, если вы хотите использовать определенные опции (описанные ниже) в вашем проекте dbt.
Тип хранения
SingleStore поддерживает два типа хранения: In-Memory Rowstore и Disk-based Columnstore (по умолчанию используется последний). Подробности смотрите в документации. Адаптер dbt-singlestore позволяет указать, на каком типе хранения будет основываться материализация вашей таблицы, используя параметр конфигурации storage_type.
{{ config(materialized='table', storage_type='rowstore') }}
select ...
Ключи
Таблицы SingleStore шардированы и могут быть созданы с различными определениями столбцов. Адаптер dbt-singlestore поддерживает следующие опции, каждая из которых принимает column_list (список имен столбцов) в качестве значения опции. Пожалуйста, обратитесь к Создание таблицы Columnstore для получения дополнительной информации о различных типах ключей в SingleStore.
primary_key(переводится какPRIMARY KEY (column_list))sort_key(переводится какKEY (column_list) USING CLUSTERED COLUMNSTORE)shard_key(переводится какSHARD KEY (column_list))unique_table_key(переводится какUNIQUE KEY (column_list))
{{
config(
primary_key=['id', 'user_id'],
shard_key=['id']
)
}}
select ...
{{
config(
materialized='table',
unique_table_key=['id'],
sort_key=['status'],
)
}}
select ...
Индексы
Аналогично адаптеру Postgres, модели таблиц, инкрементальные модели, seeds и snapshots могут иметь список определенных indexes. Каждый индекс может иметь следующие компоненты:
columns(список, обязательный): один или несколько столбцов, по которым определяется индексunique(логический, необязательный): должен ли индекс быть объявлен уникальнымtype(строка, необязательный): поддерживаемый тип индекса,hashилиbtree
Поскольку таблицы SingleStore шардированы, существуют определенные ограничения на создание индексов, подробнее см. в документации.
{{
config(
materialized='table',
shard_key=['id'],
indexes=[{'columns': ['order_date', 'id']}, {'columns': ['status'], 'type': 'hash'}]
)
}}
select ...
Другие опции
Вы можете указать набор символов и сортировку для таблицы, используя опции charset и/или collation. Поддерживаемые значения для charset — binary, utf8 и utf8mb4. Поддерживаемые значения для collation можно увидеть в выводе SQL-запроса SHOW COLLATION. Значения сортировки по умолчанию для соответствующих наборов символов — binary, utf8_general_ci и utf8mb4_general_ci.
{{
config(
charset='utf8mb4',
collation='utf8mb4_general_ci'
)
}}
select ...
Контракты моделей
Начиная с версии 1.5, адаптер dbt-singlestore поддерживает контракты моделей.
| Loading table... |
Учтите следующие ограничения при использовании контрактов с адаптером dbt-singlestore:
Определения моделей и столбцов:
- Ограничение
uniqueможет быть установлено только на уровне модели. Поэтому не устанавливайте его на уровне столбца. - Повторяющиеся ограничения вызовут ошибку. Например, установка
primary_keyкак в настройках столбца, так и в настройках модели вызовет ошибку.
Перезапись настроек:
Настройка контракта переопределяет настройку конфигурации. Например, если вы определяете primary_key или unique_table_key в конфигурации, а затем также устанавливаете его в контракте, настройка контракта заменяет настройку конфигурации.
Работа с константами:
models:
- name: dim_customers
config:
materialized: table
contract:
enforced: true
columns:
- name: customer_id
data_type: int
constraints:
- type: not_null
- name: customer_name
data_type: text
Предположим, ваша модель определена как:
select
'abc123' as customer_id,
'My Best Customer' as customer_name
При использовании констант вы должны указывать типы данных напрямую. В противном случае SingleStoreDB автоматически выберет, какой тип данных, по его мнению, наиболее подходящий.
select
('abc123' :> int) as customer_id,
('My Best Customer' :> text) as customer_name
Ошибочные типы данных
Использование контрактов моделей гарантирует, что вы случайно не добавите данные неправильного типа в столбец. Например, если вы ожидаете число в столбце, но случайно указываете текст для добавления, контракт модели поймает это и вернет ошибку.
Сообщение об ошибке может иногда показывать другое имя типа данных, чем ожидалось, из-за того, как работает коннектор singlestoredb-python. Например,
select
'abc123' as customer_id,
('My Best Customer' :> text) as customer_name
приведет к
Пожалуйста, убедитесь, что имя, data_type и количество столбцов в вашем контракте соответствуют столбцам в определении вашей модели.
| column_name | definition_type | contract_type | mismatch_reason |
| customer_id | LONGBLOB | LONG | несоответствие типа данных |
Важно отметить, что определенные отображения типов данных могут отображаться по-разному в сообщениях об ошибках, но это не влияет на их работу. Вот краткий список того, что вы можете увидеть:
| Loading table... |
Просто имейте в виду эти моменты при настройке и использовании вашего адаптера dbt-singlestore, и вы избежите распространенных ошибок!