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

Конфигурации 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.

rowstore_model.sql
{{ 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))
primary_and_shard_model.sql
{{
config(
primary_key=['id', 'user_id'],
shard_key=['id']
)
}}

select ...
unique_and_sort_model.sql
{{
config(
materialized='table',
unique_table_key=['id'],
sort_key=['status'],
)
}}

select ...

Индексы

Аналогично адаптеру Postgres, модели таблиц, инкрементальные модели, seeds и snapshots могут иметь список определенных indexes. Каждый индекс может иметь следующие компоненты:

  • columns (список, обязательный): один или несколько столбцов, по которым определяется индекс
  • unique (логический, необязательный): должен ли индекс быть объявлен уникальным
  • type (строка, необязательный): поддерживаемый тип индекса, hash или btree

Поскольку таблицы SingleStore шардированы, существуют определенные ограничения на создание индексов, подробнее см. в документации.

indexes_model.sql
{{
config(
materialized='table',
shard_key=['id'],
indexes=[{'columns': ['order_date', 'id']}, {'columns': ['status'], 'type': 'hash'}]
)
}}

select ...

Другие опции

Вы можете указать набор символов и сортировку для таблицы, используя опции charset и/или collation. Поддерживаемые значения для charsetbinary, utf8 и utf8mb4. Поддерживаемые значения для collation можно увидеть в выводе SQL-запроса SHOW COLLATION. Значения сортировки по умолчанию для соответствующих наборов символов — binary, utf8_general_ci и utf8mb4_general_ci.

utf8mb4_model.sql
{{
config(
charset='utf8mb4',
collation='utf8mb4_general_ci'
)
}}

select ...

Контракты моделей

Начиная с версии 1.5, адаптер dbt-singlestore поддерживает контракты моделей.

Тип ограниченияПоддержкаПринудительное выполнение на платформе
not_null✅ Поддерживается✅ Принудительно выполняется
primary_key✅ Поддерживается❌ Не принудительно выполняется
foreign_key❌ Не поддерживается❌ Не принудительно выполняется
unique✅ Поддерживается❌ Не принудительно выполняется
check❌ Не поддерживается❌ Не принудительно выполняется

Учтите следующие ограничения при использовании контрактов с адаптером dbt-singlestore:

Определения моделей и столбцов:

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

Перезапись настроек:

Настройка контракта переопределяет настройку конфигурации. Например, если вы определяете primary_key или unique_table_key в конфигурации, а затем также устанавливаете его в контракте, настройка контракта заменяет настройку конфигурации.

Работа с константами:

dim_customers.yml
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

Предположим, ваша модель определена как:

dim_customers.sql
select
'abc123' as customer_id,
'My Best Customer' as customer_name

При использовании констант вы должны указывать типы данных напрямую. В противном случае SingleStoreDB автоматически выберет, какой тип данных, по его мнению, наиболее подходящий.

dim_customers.sql
select
('abc123' :> int) as customer_id,
('My Best Customer' :> text) as customer_name

Ошибочные типы данных

Использование контрактов моделей гарантирует, что вы случайно не добавите данные неправильного типа в столбец. Например, если вы ожидаете число в столбце, но случайно указываете текст для добавления, контракт модели поймает это и вернет ошибку.

Сообщение об ошибке может иногда показывать другое имя типа данных, чем ожидалось, из-за того, как работает коннектор singlestoredb-python. Например,

dim_customers.sql
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 | несоответствие типа данных |

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

Тип данныхТип данных, возвращаемый
singlestoredb-python
BOOLTINY
INTLONG
CHARBINARY
VARCHARVARBINARY
TEXTBLOB
TINYTEXTTINYBLOB
MEDIUMTEXTMEDIUMBLOB
LONGTEXTLONGBLOB

Просто имейте в виду эти моменты при настройке и использовании вашего адаптера dbt-singlestore, и вы избежите распространенных ошибок!

0