Перейти к содержанию

Sources (источники данных, таблицы фактов)#

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
trisigma sl list-sources

# Генерация SQL
trisigma sl compile --source buyer_stream

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

# Режим 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#

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

  • Переиспользовать существующие sources (trisigma sl list-sources)
  • Использовать параметры :first_date и :last_date для оптимального чтения из стораджа
  • Выносить JOIN в enrichments

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

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

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

  • Enrichments — автоматическое обогащение
  • Metrics — логика расчета метрик
  • Workflow — практика

Подробнее: Концепции → Sources