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