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

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

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

  1. Переиспользовать существующие sources (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. практика

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