Как повернуть таблицу в Presto?

#sql #group-by #pivot #presto #dynamic-pivot

#sql #группировка по #сводная #presto #динамический-сводный

Вопрос:

Пусть будет таблица с именем data со столбцами time, sensor, value :

введите описание изображения здесь

Я хочу повернуть эту таблицу в Athena (Presto), чтобы получить новую таблицу, подобную этой :

введите описание изображения здесь

Для этого можно выполнить следующий запрос :

 SELECT time, 
sensor_value['temperature'] as "temperature", 
sensor_value['pressure'] as "pressure" 
FROM (
    SELECT time, mapp_agg(sensor, value) sensor_value
    FROM data
    GROUP BY time
)
 

Это работает хорошо. Но я должен указать ключи sensor_value . Таким образом, мне нужно знать уникальные значения sensor, чтобы затем вручную написать соответствующий запрос. Проблема в том, что у меня нет такой информации. Знаете ли вы общее (и эффективное) решение для решения этой проблемы? Я был бы очень признателен за любую помощь. Спасибо.

Ответ №1:

Это даст вам ответ, вам просто нужно создать row_number для поворота вашей таблицы.

 SELECT 
    TIME, 
    MAX(CASE WHEN SENSOR='TEMPERATURE' THEN VALUE END) AS TEMPERATURE,
    MAX(CASE WHEN SENSOR='PRESSURE' THEN VALUE END) AS PRESSURE
 FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY SENSOR ORDER BY TIME) AS ROW_GROUP FROM TEMP_PRESSURE)
GROUP BY ROW_GROUP