Files
clickstream-data-platform/docs/labs/optional/order-amount-difference.md
T
ddadmin 4693bc5af9 docs(labs): упрощен язык учебных заданий
- Зачем: начинающим трудно читать задания из-за необъясненных терминов и неестественных формулировок.
- Что: переработаны вводная и 21 задание, названы темы разделов, объяснены термины и сокращены повторы; согласованы правила учебного текста и ссылки.
- Проверка: сохранены 25 блоков SQL и команд и таблицы состава колонок; проверены 153 локальные ссылки и 32 входящие ссылки на разделы; git diff --check прошел.
2026-10-18 18:09:43 +02:00

6.5 KiB
Raw Blame History

Какая позиция объясняет разницу в сумме

Вы сравните товары в событии покупки и заказе магазина, чтобы найти причину разницы в суммах. При разборе вложенных данных понадобится сохранить точность цен до копейки.

Факультатив доступен после ступени 1. В DBeaver используйте пользователя analyst из инструкции подключения. Дождитесь завершения etl_pipeline; оставьте world_live на паузе и дождитесь уже начатых прогонов.

Выбор заказа

Суммы покупки в трекере и заказа в магазине различаются. Разберите их позиции и проверьте отдельно точность своего запроса и различия между событием и заказом.

В dm.purchase_vs_orders_v выберите один заказ с mismatch_class = 'amount_delta'. Возьмите закрытый день: order_day не позднее max(snapshot_date) - 6 из ods.order_v. Сохраните order_id, order_day, declared_revenue и items_total.

Найдите этот заказ в dds.order_v. Сопоставьте items_total, discount, delivery и total. Запишите равенство, связывающее эти четыре значения, и проверьте его на заказе. С какой суммой магазина следует сравнивать declared_revenue, если мы ищем расхождение именно в составе корзины? Проверьте свой выбор после разбора позиций.

Товарные позиции события и заказа

Найдите событие покупки в ods.event_v: purchaseID[1] совпадает с номером заказа, EventDate — с выбранным днем, EventType = 'purchase'. Откройте поле ecommerce. Внутри JSON массив purchase.products содержит товары из события покупки с полями id, price и quantity.

Разверните этот массив в строки и получите артикул, точную цену, количество и стоимость каждой позиции. Для разбора пригодятся JSONExtractArrayRaw и JSONExtract, для разворачивания массива — ARRAY JOIN. Деньги извлекайте как Decimal с двумя знаками после запятой.

С другой стороны используйте массивы item_sku, item_price и item_quantity заказа в dds.order_v. Элементы с одним индексом относятся к одной позиции; при разворачивании сохраняйте эту связь.

Сопоставьте позиции по артикулу так, чтобы остались видны товары, присутствующие только с одной стороны. Для каждой позиции сравните наличие, цену и количество. Что различается и сколько это добавляет к расхождению сумм? Сохраните запрос сверки для выбранных даты и номера заказа; в результате оставьте артикул, значения с обеих сторон и разность стоимостей позиций.

Проверка сумм

Подтвердите три равенства:

  • сумма стоимостей клиентских позиций равна declared_revenue;
  • сумма стоимостей позиций магазина равна items_total;
  • сумма расхождений по позициям равна declared_revenue - items_total.

Затем сравните точные цены из JSON с готовым массивом productPrice события. Пересчитайте стоимость клиентской корзины по этому массиву: сойдется ли она с declared_revenue до копейки? Найдите цены, на которых результаты различаются, и сверьте наблюдение с форматом выгрузки. Если все цены выбранной корзины целые, возьмите еще один заказ с расхождением и дробной ценой.

Какие строки подтверждают найденное расхождение? Есть ли в источниках сведения о том, почему оно возникло? Отделите наблюдения от предположений.

Поля для точного расчета

Укажите рядом с запросом, откуда брать цену, каким типом ее читать и по какому ключу сопоставлять позиции. Подтвердите выбор результатами обеих сверок: суммы разобранных позиций с суммой своего источника и позиций двух источников между собой. Какой результат укажет на ошибку вашего разбора, а какой потребует искать причину выше — в данных, которые получил запрос?

Результат работы

  • сохранен запрос сверки позиций, не теряющий товары без пары;
  • все три равенства сходятся до копейки;
  • найден пример потери точности в готовом массиве цен;
  • выбор полей, типа денег и ключа сопоставления подтвержден расчетами;
  • расхождение источников сверки отделено от ошибки своего разбора и различия между стоимостью корзины и итогом со скидкой и доставкой.