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
Другие вопросы по тегам