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 \{#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
Рекомендуется
- Переиспользовать существующие sources (
trisigma sl list-sources) - Использовать параметры
:first_dateи:last_dateдля оптимального чтения из стораджа - Выносить JOIN в enrichments
❌ Не рекомендуется
- JOIN в source
- Агрегаты в source
- Дублирование SQL между sources
Следующие шаги
- Enrichments. автоматическое обогащение
- Metrics. логика расчета метрик
- Workflow. практика
Подробнее: Концепции → Sources