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

Источники данных

Источники данных (Sources) представляют собой SQL-запросы для извлечения сырых данных из DWH. К ним относятся события, даты, идентификаторы пользователей и разрезы.

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

Обязательные поля

# sources/sources.yaml
buyer_stream:
metric_configs: [buyer_stream] # Имена конфигов метрик
sql: buyer_stream # Имя файла SQL (без .sql)
dtm: event_date # Колонка с датой
connections: [trino] # Всегда [trino]
participant: # Связь участников АБ с колонками источников
visitor: cookie_id
user: user_id

SQL требования

1. Параметры дат

SELECT cookie_id, event_date, eid
FROM dwh.events
WHERE event_date BETWEEN :first_date AND :last_date

Фильтрация таблиц фактов с помощью параметров на дату обязательна для эффективного выполнения запросов. Фильтр должен минимизировать объем чтения данных из хранилища.

Назначение фильтрации по дате

Конфиг источника содержит информацию о поле с датой (dtm), и фильтр по дате применяется автоматически:

SELECT ...
FROM ( {{ source_sql }} )
WHERE date_col BETWEEN :first_date AND :last_date

Однако compute движок (например, Trino) не всегда эффективно применяет этот фильтр, что может привести к чтению избыточных данных. Использование параметров :first_date и :last_date прямо внутри SQL источника позволяет разместить фильтры в оптимальных местах запроса, особенно в сложных случаях с вложенными запросами и группировками.

2. Событийная детализация (не агрегаты)

-- ✅ Правильно
SELECT cookie_id, eid, events_count FROM dwh.events

-- ❌ Нежелательно
SELECT cookie_id, COUNT(*) FROM dwh.events GROUP BY cookie_id

3. Без JOIN

-- ❌ Нежелательно
SELECT e.*, bs.buyer_segment
FROM dwh.events e
LEFT JOIN dwh.buyer_segments bs ...

-- ✅ Правильно (JOIN через enrichment)
SELECT cookie_id, event_date, eid FROM dwh.events

Работа с CLI

# Список sources \{#spisok-sources}
trisigma sl list-sources

# Генерация SQL \{#generatsiya-sql}
trisigma sl compile --source buyer_stream

# С параметрами \{#s-parametrami}
trisigma sl compile --source buyer_stream \
--first-date 2024-01-01 \
--last-date 2024-01-31 \
--dimensions vertical,platform

# Режим watch \{#rezhim-watch}
trisigma sl compile --source buyer_stream --watch

Пример

sources.yaml

buyer_stream:
sql: buyer_stream
connections: [trino]
participant: { visitor: cookie_id, user: user_id }
dtm: event_date
column_map: { query: query_id, item: item_id }
metric_configs: [buyer_stream, conversion]

sources/sql/buyer_stream.sql

SELECT
cookie_id,
user_id,
event_date,
eid,
item_id,
query_id,
platform_id,
vertical_id,
events_count,
revenue
FROM dwh.buyer_events
WHERE event_date BETWEEN :first_date AND :last_date

Best Practices

Рекомендуется

  1. Переиспользуйте существующие источники через команду trisigma sl list-sources.
  2. Используйте параметры :first_date и :last_date для оптимального чтения из хранилища.
  3. Выносите JOIN в обогащения (enrichments).

❌ Не рекомендуется

  1. JOIN в source
  2. Агрегаты в source
  3. Дублирование SQL между sources

Следующие шаги

  1. Изучите методы автоматического обогащения в разделе Enrichments.
  2. Опишите логику расчета в разделе Metrics.
  3. Ознакомьтесь с практикой работы в разделе Workflow.

Подробнее: Источники данных