docs(labs): обращение «вы» во всех учебных заданиях
- Зачем:
- README и путеводитель обращаются к читателю на «вы», а ТЗ в docs/labs/
были на «ты»; после пересборки индекса смесь стала заметна.
- Что:
- во всех восьми файлах docs/labs/ местоимения, глаголы и повелительное
наклонение переведены во второе лицо множественного числа.
- названия ступеней в таблице README оставлены как в спеке.
- Проверка:
- grep по формам «ты/твой», 'ё' и 'менти' по docs/labs/ молчит;
git diff --check чистый; ревью диффа свежей сессией.
This commit is contained in:
1 parent
830efa7ef4
commit
3556566f64
8 files changed
+79
-76
No files matched your search
+8
-8
@@ -1,7 +1,7 @@
|
|||||||
# Учебные задания
|
# Учебные задания
|
||||||
|
|
||||||
Программа состоит из двух частей: основная включает семь ступеней, которые ты
|
Программа состоит из двух частей: основная включает семь ступеней, которые вы
|
||||||
проходишь по порядку, а факультативы выбираешь по желанию. Причины такого
|
проходите по порядку, а факультативы выбираете по желанию. Причины такого
|
||||||
порядка и формы заданий описаны в [программе учебных лаб](../specs/2026-09-01-labs-program.md#2-устройство-программы-основная-программа-и-факультативы).
|
порядка и формы заданий описаны в [программе учебных лаб](../specs/2026-09-01-labs-program.md#2-устройство-программы-основная-программа-и-факультативы).
|
||||||
|
|
||||||
## Основная программа
|
## Основная программа
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
## Ступень 1: пять витрин слоя DM
|
## Ступень 1: пять витрин слоя DM
|
||||||
|
|
||||||
Слой DM в стенде построен наполовину: витрины трех сюжетов дашборда и контроль
|
Слой DM в стенде построен наполовину: витрины трех сюжетов дашборда и контроль
|
||||||
качества уже построены, остальные пять витрин строишь ты. Каждая из них —
|
качества уже построены, остальные пять витрин строите вы. Каждая из них —
|
||||||
самостоятельное ТЗ: в нем есть состав витрины, зерно, источники и способ
|
самостоятельное ТЗ: в нем есть состав витрины, зерно, источники и способ
|
||||||
проверки.
|
проверки.
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ DDS, и задания остаются независимыми. Исключе
|
|||||||
остается обычным представлением. Довод — [дока DM](../architecture/dm.md),
|
остается обычным представлением. Довод — [дока DM](../architecture/dm.md),
|
||||||
«Форма: по зерну, не по цене запроса».
|
«Форма: по зерну, не по цене запроса».
|
||||||
|
|
||||||
**Ключ шардирования — твое решение.** Ни одно ТЗ ключа не называет.
|
**Ключ шардирования — ваше решение.** Ни одно ТЗ ключа не называет.
|
||||||
Правило выбора и требование к донору — [дока
|
Правило выбора и требование к донору — [дока
|
||||||
хранилища](../architecture/storage.md), «Раскладка по шардам»: донор
|
хранилища](../architecture/storage.md), «Раскладка по шардам»: донор
|
||||||
объявляется через `AS <цель>_rep` и шардируется тем же ключом, что цель,
|
объявляется через `AS <цель>_rep` и шардируется тем же ключом, что цель,
|
||||||
@@ -69,7 +69,7 @@ DDS, и задания остаются независимыми. Исключе
|
|||||||
`dm.revenue_daily_dist` в [`sql/ddl/55-dm-tables.sql`](../../sql/ddl/55-dm-tables.sql).
|
`dm.revenue_daily_dist` в [`sql/ddl/55-dm-tables.sql`](../../sql/ddl/55-dm-tables.sql).
|
||||||
|
|
||||||
**Где лежит код.** DDL домашек — свой файл `sql/ddl/70-labs.sql`: он
|
**Где лежит код.** DDL домашек — свой файл `sql/ddl/70-labs.sql`: он
|
||||||
применяется после стендовых по порядку имени, и твои объекты не мешаются
|
применяется после стендовых по порядку имени, и ваши объекты не мешаются
|
||||||
со стендовыми. У агрегатов рядом со стендовыми ложатся еще три запроса —
|
со стендовыми. У агрегатов рядом со стендовыми ложатся еще три запроса —
|
||||||
`sql/dm/<витрина>_scope.sql` спрашивает у хранилища, какие дни пересобирает
|
`sql/dm/<витрина>_scope.sql` спрашивает у хранилища, какие дни пересобирает
|
||||||
запуск, `_rebuild.sql` собирает их в донор, `_replace.sql` заменяет
|
запуск, `_rebuild.sql` собирает их в донор, `_replace.sql` заменяет
|
||||||
@@ -106,14 +106,14 @@ DDS, и задания остаются независимыми. Исключе
|
|||||||
**Предупреждение.** Запросы самой проверки лежат в `sql/dq/` открыто, и
|
**Предупреждение.** Запросы самой проверки лежат в `sql/dq/` открыто, и
|
||||||
имена называют витрину и роль сверки. Проверка на инвариантах неизбежно
|
имена называют витрину и роль сверки. Проверка на инвариантах неизбежно
|
||||||
близка к ответу: чтобы сверить витрину, надо ее пересчитать. Прятать эти
|
близка к ответу: чтобы сверить витрину, надо ее пересчитать. Прятать эти
|
||||||
файлы никто не станет — но открыв их до того, как задание сделано, ты
|
файлы никто не станет — но открыв их до того, как задание сделано, вы
|
||||||
обменяешь урок на готовый SQL.
|
обменяете урок на готовый SQL.
|
||||||
Смотреть туда стоит после своей сборки: сравнить два решения полезно,
|
Смотреть туда стоит после своей сборки: сравнить два решения полезно,
|
||||||
списать одно — нет.
|
списать одно — нет.
|
||||||
|
|
||||||
## Факультативы
|
## Факультативы
|
||||||
|
|
||||||
Эти задания ты берешь по желанию. Полный список сюжетов — в разделе
|
Эти задания вы берете по желанию. Полный список сюжетов — в разделе
|
||||||
[«Факультативы — пять разделов»](../specs/2026-09-01-labs-program.md#4-факультативы--пять-разделов)
|
[«Факультативы — пять разделов»](../specs/2026-09-01-labs-program.md#4-факультативы--пять-разделов)
|
||||||
программы.
|
программы.
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
марта удалены.
|
марта удалены.
|
||||||
|
|
||||||
Отсюда правило прогона: пересобираются **только те дни загрузки, которые
|
Отсюда правило прогона: пересобираются **только те дни загрузки, которые
|
||||||
еще есть в источнике**. Спроси у источника список живых дней и замени
|
еще есть в источнике**. Спросите у источника список живых дней и замените
|
||||||
партиции ровно этих дней. Соблазн «собрать все заново в донор и подменить
|
партиции ровно этих дней. Соблазн «собрать все заново в донор и подменить
|
||||||
таблицу целиком» здесь стоит дороже обычного: истекшие по `TTL` дни исчезли
|
таблицу целиком» здесь стоит дороже обычного: истекшие по `TTL` дни исчезли
|
||||||
бы из витрины навсегда, а вместе с ними — единственная оставшаяся память о
|
бы из витрины навсегда, а вместе с ними — единственная оставшаяся память о
|
||||||
@@ -79,9 +79,9 @@
|
|||||||
|
|
||||||
## Ключ шардирования
|
## Ключ шардирования
|
||||||
|
|
||||||
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
||||||
шардам». Витрина крошечная: классов брака у событий и заказов вместе меньше
|
шардам». Витрина крошечная: классов брака у событий и заказов вместе меньше
|
||||||
десятка. Учти это в защите ключа — иногда правильный ответ звучит как
|
десятка. Учтите это в защите ключа — иногда правильный ответ звучит как
|
||||||
«перекос здесь ничего не стоит, и вот почему».
|
«перекос здесь ничего не стоит, и вот почему».
|
||||||
|
|
||||||
## Как проверить себя
|
## Как проверить себя
|
||||||
@@ -91,8 +91,8 @@
|
|||||||
день за границей `TTL` сверять не с чем, и его отсутствие в источнике не
|
день за границей `TTL` сверять не с чем, и его отсутствие в источнике не
|
||||||
ошибка.
|
ошибка.
|
||||||
|
|
||||||
Собери прямой счет по обеим таблицам ошибок, соедини с
|
Соберите прямой счет по обеим таблицам ошибок, соедините с
|
||||||
`dm.dq_errors_daily_v` полным внешним соединением по ключу и посчитай
|
`dm.dq_errors_daily_v` полным внешним соединением по ключу и посчитайте
|
||||||
строки, где ключа нет с одной из сторон или где расходится `error_rows`.
|
строки, где ключа нет с одной из сторон или где расходится `error_rows`.
|
||||||
Ноль — зеленый.
|
Ноль — зеленый.
|
||||||
|
|
||||||
|
|||||||
@@ -91,10 +91,10 @@
|
|||||||
|
|
||||||
## Как проверить себя
|
## Как проверить себя
|
||||||
|
|
||||||
Деловой ключ — `event_id` внутри дня. Собери прямой ответ из `dds.event_v`
|
Деловой ключ — `event_id` внутри дня. Соберите прямой ответ из
|
||||||
за тот же день, соедини с витриной полным внешним соединением и посчитай
|
`dds.event_v` за тот же день, соедините с витриной полным внешним
|
||||||
строки, где ключа нет с одной из сторон или где различаются значения
|
соединением и посчитайте строки, где ключа нет с одной из сторон или где
|
||||||
деловых колонок. Ноль — зеленый.
|
различаются значения деловых колонок. Ноль — зеленый.
|
||||||
|
|
||||||
Отдельно проверяются три производные колонки: `event_hour`, `page_path` и
|
Отдельно проверяются три производные колонки: `event_hour`, `page_path` и
|
||||||
`referer_host` должны совпасть с тем же выражением, посчитанным по
|
`referer_host` должны совпасть с тем же выражением, посчитанным по
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ DDS уже перевел код источника в слово. Словар
|
|||||||
|
|
||||||
С `visitors` история тоньше, и в ней главная ловушка задания. Складывать
|
С `visitors` история тоньше, и в ней главная ловушка задания. Складывать
|
||||||
уникальных по строкам нельзя: один и тот же посетитель, попавший в две
|
уникальных по строкам нельзя: один и тот же посетитель, попавший в две
|
||||||
строки, будет посчитан дважды. Проверь на стенде — и увидишь, что сумма
|
строки, будет посчитан дважды. Проверьте на стенде — и увидите, что сумма
|
||||||
`visitors` по устройствам за день **сходится** с `dm.daily_traffic_v`.
|
`visitors` по устройствам за день **сходится** с `dm.daily_traffic_v`.
|
||||||
|
|
||||||
Это не отменяет правила, а показывает, откуда берется совпадение: в мире
|
Это не отменяет правила, а показывает, откуда берется совпадение: в мире
|
||||||
@@ -87,17 +87,17 @@ DDS уже перевел код источника в слово. Словар
|
|||||||
|
|
||||||
## Ключ шардирования
|
## Ключ шардирования
|
||||||
|
|
||||||
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
||||||
шардам». Здесь у измерения всего три встречающихся значения, и распределены
|
шардам». Здесь у измерения всего три встречающихся значения, и распределены
|
||||||
они неровно: планшеты — тонкая полоса, а телефоны и настольные машины держат
|
они неровно: планшеты — тонкая полоса, а телефоны и настольные машины держат
|
||||||
основную массу. Прежде чем брать хеш от одного `device_category`, посчитай,
|
основную массу. Прежде чем брать хеш от одного `device_category`, посчитайте,
|
||||||
сколько строк ляжет на каждый шард, и назови, чем тебя устраивает результат.
|
сколько строк ляжет на каждый шард, и назовите, чем вас устраивает результат.
|
||||||
|
|
||||||
## Как проверить себя
|
## Как проверить себя
|
||||||
|
|
||||||
Деловой ключ — `device_category` внутри дня. Собери прямой агрегат из
|
Деловой ключ — `device_category` внутри дня. Соберите прямой агрегат из
|
||||||
`dds.session_v` за день, соедини с `dm.session_overview_v` полным внешним
|
`dds.session_v` за день, соедините с `dm.session_overview_v` полным внешним
|
||||||
соединением и посчитай строки, где ключа нет с одной из сторон или где
|
соединением и посчитайте строки, где ключа нет с одной из сторон или где
|
||||||
расходится любой счетчик. Ноль — зеленый.
|
расходится любой счетчик. Ноль — зеленый.
|
||||||
|
|
||||||
Две проверки покрупнее ловят грубую ошибку сразу:
|
Две проверки покрупнее ловят грубую ошибку сразу:
|
||||||
|
|||||||
+24
-23
@@ -10,20 +10,20 @@
|
|||||||
|
|
||||||
## Роль графика
|
## Роль графика
|
||||||
|
|
||||||
В задании 3 ты собрал витрину `dm.session_overview_v`. Теперь покажи, с каких
|
В задании 3 вы собрали витрину `dm.session_overview_v`. Теперь покажите, с
|
||||||
устройств чаще уходят после первой страницы. Построй столбиковый график доли
|
каких устройств чаще уходят после первой страницы. Постройте столбиковый
|
||||||
отказов по `device_category` за весь период витрины. Измерение одно —
|
график доли отказов по `device_category` за весь период витрины. Измерение
|
||||||
`device_category`, метрика тоже одна.
|
одно — `device_category`, метрика тоже одна.
|
||||||
|
|
||||||
## Что сделать
|
## Что сделать
|
||||||
|
|
||||||
Заведи физический датасет в подключении к `ClickHouse`: схема `dm`, объект
|
Заведите физический датасет в подключении к `ClickHouse`: схема `dm`, объект
|
||||||
`session_overview_v`. Назови по-русски хотя бы две колонки:
|
`session_overview_v`. Назовите по-русски хотя бы две колонки:
|
||||||
|
|
||||||
- `device_category` — «Категория устройства»;
|
- `device_category` — «Категория устройства»;
|
||||||
- `report_date` — «Дата отчета».
|
- `report_date` — «Дата отчета».
|
||||||
|
|
||||||
В редакторе датасета, на вкладке «Metrics», создай метрику:
|
В редакторе датасета, на вкладке «Metrics», создайте метрику:
|
||||||
|
|
||||||
| Поле | Значение |
|
| Поле | Значение |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -33,35 +33,35 @@
|
|||||||
| `D3 format` | `.1%` |
|
| `D3 format` | `.1%` |
|
||||||
|
|
||||||
Доля считается из сумм слагаемых: среднее готовых долей соврет. Поэтому
|
Доля считается из сумм слагаемых: среднее готовых долей соврет. Поэтому
|
||||||
метрике нужно это выражение. Сохрани ее в датасете, а не в графике: подписи и
|
метрике нужно это выражение. Сохраните ее в датасете, а не в графике:
|
||||||
формат задаются в датасете, а график их использует. Так во всех будущих
|
подписи и формат задаются в датасете, а график их использует. Так во всех
|
||||||
графиках у метрики будут одинаковые подписи. Это правило описано в
|
будущих графиках у метрики будут одинаковые подписи. Это правило описано в
|
||||||
[справочнике Superset](../architecture/superset.md#дерево-импорта).
|
[справочнике Superset](../architecture/superset.md#дерево-импорта).
|
||||||
|
|
||||||
Не используй вкладку «Custom SQL» конструктора графика. Созданная там метрика
|
Не используйте вкладку «Custom SQL» конструктора графика. Созданная там
|
||||||
доступна только этому графику, а нужна метрика датасета.
|
метрика доступна только этому графику, а нужна метрика датасета.
|
||||||
|
|
||||||
Создай столбиковый график с метрикой «Доля отказов». В поле «X-axis» укажи
|
Создайте столбиковый график с метрикой «Доля отказов». В поле «X-axis»
|
||||||
«Категория устройства», а «Dimensions» не заполняй. Дашборд создавать не
|
укажите «Категория устройства», а «Dimensions» не заполняйте. Дашборд
|
||||||
нужно: сохраненного графика достаточно.
|
создавать не нужно: сохраненного графика достаточно.
|
||||||
|
|
||||||
По умолчанию в графике выбран период «No filter». Оставь его таким или задай
|
По умолчанию в графике выбран период «No filter». Оставьте его таким или
|
||||||
явные даты. Относительный период, например «Last week», даст пустой
|
задайте явные даты. Относительный период, например «Last week», даст пустой
|
||||||
график: модельный календарь стенда отстает от настоящего. Последнюю дату
|
график: модельный календарь стенда отстает от настоящего. Последнюю дату
|
||||||
витрины посмотри в SQL Lab:
|
витрины посмотрите в SQL Lab:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT max(report_date)
|
SELECT max(report_date)
|
||||||
FROM dm.session_overview_v;
|
FROM dm.session_overview_v;
|
||||||
```
|
```
|
||||||
|
|
||||||
Стендовые объекты не меняй. Что переживает `make up`, а что стирает
|
Стендовые объекты не меняйте. Что переживает `make up`, а что стирает
|
||||||
`make clean`, описано в главе [«Немного Superset»](../handbook/superset.md#стендовые-объекты-и-ваши).
|
`make clean`, описано в главе [«Немного Superset»](../handbook/superset.md#стендовые-объекты-и-ваши).
|
||||||
|
|
||||||
## Как проверить себя
|
## Как проверить себя
|
||||||
|
|
||||||
График проверяется глазами, поэтому задачи для него в `homework_check` нет.
|
График проверяется глазами, поэтому задачи для него в `homework_check` нет.
|
||||||
В SQL Lab выполни запрос:
|
В SQL Lab выполните запрос:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT device_category,
|
SELECT device_category,
|
||||||
@@ -71,9 +71,10 @@ GROUP BY device_category
|
|||||||
ORDER BY device_category;
|
ORDER BY device_category;
|
||||||
```
|
```
|
||||||
|
|
||||||
Сверь с графиком значение для каждой категории. В разделе «Customize» включи
|
Сверьте с графиком значение для каждой категории. В разделе «Customize»
|
||||||
«Show Value» или наведи указатель на столбик. Запрос возвращает проценты с одним знаком,
|
включите «Show Value» или наведите указатель на столбик. Запрос возвращает
|
||||||
как формат `.1%`, поэтому числа должны совпасть один в один.
|
проценты с одним знаком, как формат `.1%`, поэтому числа должны совпасть
|
||||||
|
один в один.
|
||||||
|
|
||||||
## Приемка
|
## Приемка
|
||||||
|
|
||||||
|
|||||||
@@ -9,30 +9,31 @@
|
|||||||
|
|
||||||
## Роль дашборда
|
## Роль дашборда
|
||||||
|
|
||||||
Собери обзор трафика и поведения посетителей. Он должен отвечать на три
|
Соберите обзор трафика и поведения посетителей. Он должен отвечать на три
|
||||||
вопроса: что происходило в магазине, какие страницы, устройства и рекламные
|
вопроса: что происходило в магазине, какие страницы, устройства и рекламные
|
||||||
каналы дали результат, были ли ошибки приема данных.
|
каналы дали результат, были ли ошибки приема данных.
|
||||||
|
|
||||||
Стендовый дашборд «Бизнес-сюжеты» собран из готовых витрин. Свой дашборд
|
Стендовый дашборд «Бизнес-сюжеты» собран из готовых витрин. Свой дашборд
|
||||||
собери из пяти витрин, которые ты построил в заданиях. Копировать раскладку
|
соберите из пяти витрин, которые вы построили в заданиях. Копировать раскладку
|
||||||
стендового дашборда не нужно: выбери форму, в которой ответы читаются без
|
стендового дашборда не нужно: выберите форму, в которой ответы читаются без
|
||||||
пояснений рядом с экраном.
|
пояснений рядом с экраном.
|
||||||
|
|
||||||
## Свои объекты — отдельно
|
## Свои объекты — отдельно
|
||||||
|
|
||||||
Не добавляй графики в стендовый дашборд и не правь его датасеты. При
|
Не добавляйте графики в стендовый дашборд и не правьте его датасеты. При
|
||||||
инициализации Superset импорт с `--overwrite` заменит ручные правки стендовых
|
инициализации Superset импорт с `--overwrite` заменит ручные правки стендовых
|
||||||
объектов файлами из репозитория. `make up` свой дашборд не стирает; срок жизни
|
объектов файлами из репозитория. `make up` свой дашборд не стирает; срок жизни
|
||||||
таких объектов описан в [доке Superset](../architecture/superset.md), «Импорт
|
таких объектов описан в [доке Superset](../architecture/superset.md), «Импорт
|
||||||
при каждой инициализации».
|
при каждой инициализации».
|
||||||
|
|
||||||
Заведи отдельные датасеты и графики, собери из них свой дашборд. Назови его,
|
Заведите отдельные датасеты и графики, соберите из них свой дашборд.
|
||||||
например, «Мои витрины DM». Это то же правило, по которому DDL домашек лежит
|
Назовите его, например, «Мои витрины DM». Это то же правило, по которому DDL
|
||||||
в `sql/ddl/70-labs.sql`: стендовые объекты уже есть, свои создаешь ты.
|
домашек лежит в `sql/ddl/70-labs.sql`: стендовые объекты уже есть, свои
|
||||||
|
создаете вы.
|
||||||
|
|
||||||
## Датасеты
|
## Датасеты
|
||||||
|
|
||||||
Заведи в подключении `ClickHouse` пять физических датасетов схемы `dm`:
|
Заведите в подключении `ClickHouse` пять физических датасетов схемы `dm`:
|
||||||
|
|
||||||
- `events_enriched_v`;
|
- `events_enriched_v`;
|
||||||
- `top_pages_daily_v`;
|
- `top_pages_daily_v`;
|
||||||
@@ -43,7 +44,7 @@
|
|||||||
## Состав дашборда
|
## Состав дашборда
|
||||||
|
|
||||||
Каждая из пяти витрин должна появиться хотя бы в одном графике. Точный тип
|
Каждая из пяти витрин должна появиться хотя бы в одном графике. Точный тип
|
||||||
графика выбери сам. На дашборде покажи следующее:
|
графика выберите сами. На дашборде покажите следующее:
|
||||||
|
|
||||||
| Витрина | Что показать |
|
| Витрина | Что показать |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -53,7 +54,7 @@
|
|||||||
| `dq_errors_daily_v` | число ошибок по дню загрузки, источнику и классу |
|
| `dq_errors_daily_v` | число ошибок по дню загрузки, источнику и классу |
|
||||||
| `utm_effectiveness_v` | трафик, покупки и заявленную выручку по рекламным каналам |
|
| `utm_effectiveness_v` | трафик, покупки и заявленную выручку по рекламным каналам |
|
||||||
|
|
||||||
Для долей используй слагаемые из витрин. Например, доля отказов считается
|
Для долей используйте слагаемые из витрин. Например, доля отказов считается
|
||||||
как сумма `bounce_sessions`, деленная на сумму `sessions`. Среднее по готовым
|
как сумма `bounce_sessions`, деленная на сумму `sessions`. Среднее по готовым
|
||||||
долям для такого графика не подходит — урок задания 3 остается в силе.
|
долям для такого графика не подходит — урок задания 3 остается в силе.
|
||||||
|
|
||||||
@@ -64,19 +65,20 @@
|
|||||||
Эта лаба проверяется глазами. У расположения панелей и понятных подписей нет
|
Эта лаба проверяется глазами. У расположения панелей и понятных подписей нет
|
||||||
счетного инварианта, поэтому задачи для нее в `homework_check` нет.
|
счетного инварианта, поэтому задачи для нее в `homework_check` нет.
|
||||||
|
|
||||||
Открой список дашбордов и проверь:
|
Откройте список дашбордов и проверьте:
|
||||||
|
|
||||||
- «Бизнес-сюжеты» остался отдельным стендовым дашбордом;
|
- «Бизнес-сюжеты» остался отдельным стендовым дашбордом;
|
||||||
- твой дашборд открывается без ошибок и содержит график от каждого из пяти
|
- ваш дашборд открывается без ошибок и содержит график от каждого из пяти
|
||||||
датасетов;
|
датасетов;
|
||||||
- подписи, единицы измерения и легенды читаются без обращения к SQL;
|
- подписи, единицы измерения и легенды читаются без обращения к SQL;
|
||||||
- прямой трафик не исчез из графика UTM, а заявленная выручка не выдана за
|
- прямой трафик не исчез из графика UTM, а заявленная выручка не выдана за
|
||||||
серверную;
|
серверную;
|
||||||
- пустой график ошибок нормален, если в таблицах брака сейчас нет строк.
|
- пустой график ошибок нормален, если в таблицах брака сейчас нет строк.
|
||||||
|
|
||||||
Последний проход сделай как читатель: найди на экране самый заметный канал,
|
Последний проход сделайте как читатель: найдите на экране самый заметный
|
||||||
страницу и устройство, затем проверь, понятно ли из подписей, что именно
|
канал, страницу и устройство, затем проверьте, понятно ли из подписей, что
|
||||||
сравнивается. Если ответ приходится угадывать, поправь график или его название.
|
именно сравнивается. Если ответ приходится угадывать, поправьте график или
|
||||||
|
его название.
|
||||||
|
|
||||||
## Приемка
|
## Приемка
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
пересобирать нужно только то, что еще не собрано: хвост дней, которых в
|
пересобирать нужно только то, что еще не собрано: хвост дней, которых в
|
||||||
витрине нет, — от первого несобранного прожитого дня до последнего
|
витрине нет, — от первого несобранного прожитого дня до последнего
|
||||||
прожитого. Готовые дни трогать незачем, а вот дыру, оставленную частичным
|
прожитого. Готовые дни трогать незачем, а вот дыру, оставленную частичным
|
||||||
отказом, объем прогона обязан подобрать: ищи не последний собранный день, а
|
отказом, объем прогона обязан подобрать: ищите не последний собранный день, а
|
||||||
первый несобранный.
|
первый несобранный.
|
||||||
|
|
||||||
Механика — сборка отрезка в донор одной вставкой и замена дневных партиций
|
Механика — сборка отрезка в донор одной вставкой и замена дневных партиций
|
||||||
@@ -72,16 +72,16 @@
|
|||||||
|
|
||||||
## Ключ шардирования
|
## Ключ шардирования
|
||||||
|
|
||||||
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
||||||
шардам». Подумай, чем эта витрина отличается от `revenue_daily`: там кроме
|
шардам». Подумайте, чем эта витрина отличается от `revenue_daily`: там кроме
|
||||||
дня было одно измерение из шести близких по объему значений, здесь —
|
дня было одно измерение из шести близких по объему значений, здесь —
|
||||||
страницы, которых много и которые по популярности очень неровные.
|
страницы, которых много и которые по популярности очень неровные.
|
||||||
|
|
||||||
## Как проверить себя
|
## Как проверить себя
|
||||||
|
|
||||||
Деловой ключ — `page_path` внутри дня. Собери прямой агрегат из
|
Деловой ключ — `page_path` внутри дня. Соберите прямой агрегат из
|
||||||
`dds.event_v` за день, соедини с `dm.top_pages_daily_v` полным внешним
|
`dds.event_v` за день, соедините с `dm.top_pages_daily_v` полным внешним
|
||||||
соединением по ключу и посчитай строки, где ключа нет с одной из сторон или
|
соединением по ключу и посчитайте строки, где ключа нет с одной из сторон или
|
||||||
где расходится любой из четырех счетчиков. Ноль — зеленый.
|
где расходится любой из четырех счетчиков. Ноль — зеленый.
|
||||||
|
|
||||||
Две проверки попроще, ими удобно ловить грубую ошибку до полного
|
Две проверки попроще, ими удобно ловить грубую ошибку до полного
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
Проверки ловят разное. Фильтр `WHERE event_type = 'pageview'` первая из них
|
Проверки ловят разное. Фильтр `WHERE event_type = 'pageview'` первая из них
|
||||||
пропускает: отбор строк по типу не меняет счет событий того же типа.
|
пропускает: отбор строк по типу не меняет счет событий того же типа.
|
||||||
Расхождение покажет только вторая — вместе с `cart_adds` обнулятся и
|
Расхождение покажет только вторая — вместе с `cart_adds` обнулятся и
|
||||||
`purchases`. Проверку выбирают по тому, умеет ли она покраснеть на твоей
|
`purchases`. Проверку выбирают по тому, умеет ли она покраснеть на вашей
|
||||||
ошибке, а не по тому, как быстро она пишется: [проверка, которая не умеет
|
ошибке, а не по тому, как быстро она пишется: [проверка, которая не умеет
|
||||||
краснеть, бесполезна](../architecture/testing.md).
|
краснеть, бесполезна](../architecture/testing.md).
|
||||||
|
|
||||||
|
|||||||
@@ -88,21 +88,21 @@ UTM у бэкенда нет, метки живут только в кликст
|
|||||||
|
|
||||||
## Ключ шардирования
|
## Ключ шардирования
|
||||||
|
|
||||||
Твое решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
Ваше решение по [правилу донора](../architecture/storage.md), «Раскладка по
|
||||||
шардам». Зерно здесь составное, из трех колонок, и решение «взять хеш от
|
шардам». Зерно здесь составное, из трех колонок, и решение «взять хеш от
|
||||||
одной из них» надо защищать отдельно: назови, какая доля строк придется на
|
одной из них» надо защищать отдельно: назовите, какая доля строк придется на
|
||||||
самое частое значение выбранной колонки.
|
самое частое значение выбранной колонки.
|
||||||
|
|
||||||
## Конфликт, ради которого витрина и написана
|
## Конфликт, ради которого витрина и написана
|
||||||
|
|
||||||
Собери за один и тот же день две суммы: `sum(declared_revenue)` из своей
|
Соберите за один и тот же день две суммы: `sum(declared_revenue)` из своей
|
||||||
витрины и `sum(revenue)` из `dm.revenue_daily_v`. Они не сойдутся, и это
|
витрины и `sum(revenue)` из `dm.revenue_daily_v`. Они не сойдутся, и это
|
||||||
верное поведение обеих витрин.
|
верное поведение обеих витрин.
|
||||||
|
|
||||||
Базы у двух сумм при этом сравнимые: `revenue_daily` складывает цену позиций
|
Базы у двух сумм при этом сравнимые: `revenue_daily` складывает цену позиций
|
||||||
на количество и ни скидки, ни доставки в себя не берет — ровно то, что видит
|
на количество и ни скидки, ни доставки в себя не берет — ровно то, что видит
|
||||||
клиент. Значит все расхождение до копейки объясняется тем, что случилось с
|
клиент. Значит все расхождение до копейки объясняется тем, что случилось с
|
||||||
заказом, а не тем, как считали деньги. Ищи ответы среди таких причин:
|
заказом, а не тем, как считали деньги. Ищите ответы среди таких причин:
|
||||||
|
|
||||||
- отмененный заказ из кликстрима никуда не девается: событие покупки
|
- отмененный заказ из кликстрима никуда не девается: событие покупки
|
||||||
случилось, а `revenue_daily` считает только оплаченные;
|
случилось, а `revenue_daily` считает только оплаченные;
|
||||||
@@ -113,7 +113,7 @@ UTM у бэкенда нет, метки живут только в кликст
|
|||||||
|
|
||||||
Как эти же расхождения выглядят на зерне заказа, показывает стендовая
|
Как эти же расхождения выглядят на зерне заказа, показывает стендовая
|
||||||
витрина `dm.purchase_vs_orders_v` с ее классами расхождений: это готовый
|
витрина `dm.purchase_vs_orders_v` с ее классами расхождений: это готовый
|
||||||
ответ на вопрос «а сколько именно и из-за чего». Запиши свой вывод —
|
ответ на вопрос «а сколько именно и из-за чего». Запишите свой вывод —
|
||||||
в двух-трех фразах, своими словами.
|
в двух-трех фразах, своими словами.
|
||||||
|
|
||||||
Проверять сходимость этих двух сумм не нужно и нельзя: они и не должны
|
Проверять сходимость этих двух сумм не нужно и нельзя: они и не должны
|
||||||
@@ -122,8 +122,8 @@ UTM у бэкенда нет, метки живут только в кликст
|
|||||||
## Как проверить себя
|
## Как проверить себя
|
||||||
|
|
||||||
Деловой ключ — тройка `utm_source`, `utm_medium`, `utm_campaign` внутри
|
Деловой ключ — тройка `utm_source`, `utm_medium`, `utm_campaign` внутри
|
||||||
дня. Собери прямой агрегат из `dds.event_v` за день, соедини с
|
дня. Соберите прямой агрегат из `dds.event_v` за день, соедините с
|
||||||
`dm.utm_effectiveness_v` полным внешним соединением и посчитай строки, где
|
`dm.utm_effectiveness_v` полным внешним соединением и посчитайте строки, где
|
||||||
ключа нет с одной из сторон или где расходится любая из пяти величин. Ноль —
|
ключа нет с одной из сторон или где расходится любая из пяти величин. Ноль —
|
||||||
зеленый.
|
зеленый.
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user