Distributed таблицу. Каждая запись имеет row_key и timestamp (они же в ключе сортировке). Как наиболее эффективно взять последнюю запись для row_key?
Можно ли сделать лучше, чем внизу?
SELECT
*
FROM
<table> AS m
INNER JOIN
(
SELECT
row_key,
max(ts) AS maxts
FROM
<table> AS m2
GROUP BY
row_key
) AS m3
ON
(m.row_key = m3.row_key) AND (m.ts = m3.maxts)
SETTINGS
distributed_product_mode = 'allow'
select row_key, max(ts) ... group by row_key чем-то плох?
Ну я упростил запрос, там ведь есть еще другие поля, которые надо вытаскивать для последнего значения. Поэтому inner join используется, чтобы определить ключ последней записи и потом вытащить из нее другие данные.
Есть argMax, он понимает tuple. Наверное, это даже будет быстрее, но твердо обещать не могу.
Да, я сейчас пробую схему с select max(ts, field2, field3) as result, result.2 as last_field2 from .. group by row_key
Я вот сейчас осознал, что оно неправильно считает. Поэтому argMax - это более надежный способ.
Наверное, можно использовать ASOF JOIN, но непонятно зачем: argMax кажется естественнее
Обсуждают сегодня