Timestream - сводные данные по измерениям
TimeStream хранит данные с использованием подхода "ключ: значение".
Есть ли какой-либо простой способ развернуть данные на основе измерений, чтобы получить, например, максимум всех доступных мер в столбце, названном в качестве имени меры?
Возьмем пример со следующим набором данных:
| time | instance_id | measure_name | measure_value::double | measure_value::bigint |
|------------------------------- |------------- |-------------------- |----------------------- |----------------------- |
| 2019-12-04 19:00:00.000000000 | A | cpu_utilization | 35 | null |
| 2019-12-04 19:00:01.000000000 | A | cpu_utilization | 38.2 | null |
| 2019-12-04 19:00:02.000000000 | B | cpu_utilization | 45.3 | null |
| 2019-12-04 19:00:00.000000000 | A | memory_utilization | 54.9 | null |
| 2019-12-04 19:00:01.000000000 | A | memory_utilization | 42.6 | null |
| 2019-12-04 19:00:02.000000000 | B | memory_utilization | 33.3 | null |
Мы хотим создать общий запрос, который обеспечил бы следующий результат без необходимости преобразования кода:
| instance_id | cpu_utilization (max) | memory_utilization (max) |
|------------- |----------------------- |-------------------------- |
| A | 38.2 | 54.9 |
| B | 45.3 | 33.3 |
Конечно, я знаю, что, получив следующее (см. Следующую таблицу), с небольшим количеством кода на моем любимом языке очень легко сделать поворот, но мне было интересно, возможно ли это на собственном языке.
| instance_id | measure_name | max(measure_value) |
|------------- |-------------------- |-------------------- |
| A | cpu_utilization | 38.2 |
| B | cpu_utilization | 45.3 |
| A | memory_utilization | 54.9 |
| B | memory_utilization | 33.3 |
Спасибо
1 ответ
Сделать
GROUP BY
. Использовать
case
выражения для условного агрегирования:
select instance_id,
max(case when measure_name = 'cpu_utilization' then measure_value end),
max(case when measure_name = 'memory_utilization' then measure_value end)
from tablename
group by instance_id