ClickHouse · ClickHouse 26.3.57.12
Цены продавцов меняются тысячи раз в минуту, поэтому в offers не обновляют строки, а дописывают новые с большей version. Таблица — ReplacingMergeTree(version, is_deleted): при слиянии кусков останется последняя версия SKU, а строка с is_deleted = 1 означает, что предложение снято.
Слияние идёт в фоне и неизвестно когда. Для каждого продавца по актуальным версиям верните seller_id, skus — число живых SKU и min_price_rub — минимальную цену. SKU может перейти к другому продавцу — считается по последней версии.
В работе: Витрина «Продавцы»: сколько товаров у продавца и от какой цены, без ожидания фоновых слияний.
Источник: на данных Ozon: цены и предложения продавцов. Условие пересказано своими словами.
Какие запросы вернут живые SKU и минимальную цену по продавцу?
- Без FINAL
- SELECT … FROM offers FINAL
- argMax без учёта is_deleted
- argMax по version для каждого SKU и фильтр del = 0
- argMax по паре (sku, seller_id)