Вопрос:

Как объединить строки в столбцы в AWS Athena?

sql amazon-web-services pivot amazon-athena

2920 просмотра

3 ответа

128 Репутация автора

Я новичок в AWS Athena и пытаюсь объединить несколько строк в столбцы, как показано в верхнем ответе в этом сообщении StackOverflow .

Однако когда я попробовал:

SELECT column1, column2, column3
FROM data
PIVOT
(
  MIN(column3)
  FOR column2 IN ('VALUE1','VALUE2','VALUE3','VALUE4')
)

Я получаю ошибку: mismatched input '(' expecting {',', ')'} (service: amazonathena; status code: 400; error code: invalidrequestexception

Кто-нибудь знает, как достичь того, чего я пытаюсь достичь в AWS Athena?

Автор: Louis Источник Размещён: 28.12.2017 07:30

Ответы (3)


0 плюса

51 Репутация автора

У меня была такая же проблема с использованием функции PIVOT. Однако я использовал способ, позволяющий получить аналогичный формат данных:

select 
  columnToGroupOn,
  min(if(colToPivot=VALUE1,column3,null)) as VALUE1, 
  min(if(colToPivot=VALUE2,column3,null)) as VALUE2, 
  min(if(colToPivot=VALUE3,column3,null)) as VALUE3 
from
    data
group by columnToGroupOn           
Автор: Resham Wadhwa Размещён: 22.02.2018 12:16

1 плюс

219 Репутация автора

Вы можете сделать один столбец PIVOTв Афине, используя map_agg.

SELECT
  uid,
  kv['c1'] AS c1,
  kv['c2'] AS c2,
  kv['c3'] AS c3
FROM (
  SELECT uid, map_agg(key, value) kv
  FROM vtable
  GROUP BY uid
) t

Кредит идет на этот сайт . К сожалению, я не нашел умного способа сделать многоколоночную сводку таким образом (я вложил запрос, что не очень красиво).

Автор: kadrach Размещён: 26.03.2018 11:22

2 плюса

21 Репутация автора

Расширяя ответ @kadrach. Предполагая таблицу как это

uid | key | value1 | value2
----+-----+--------+--------
 1  |  A  |  10    | 1000
 1  |  B  |  20    | 2000
 2  |  A  |  11    | 1001
 2  |  B  |  21    | 2001

Одиночный столбец PIVOT работает так

SELECT
  uid,
  kv1['A'] AS A_v1,
  kv1['B'] AS B_v1
FROM (
  SELECT uid, map_agg(key, value1) kv1
  FROM vtable
  GROUP BY uid
) 

Результат:

uid | A_v1 | B_v1 
----+------+-------
 1  |  10  |  20   
 2  |  11  |  21  

Мультиколонка PIVOT работает так

SELECT
  uid,
  kv1['A'] AS A_v1,
  kv1['B'] AS B_v1,
  kv2['A'] AS A_v2,
  kv2['B'] AS B_v2
FROM (
  SELECT uid,
      map_agg(key, value1) kv1,
      map_agg(key, value2) kv2
  FROM vtable
  GROUP BY uid
) 

Результат:

uid | A_v1 | B_v1 | A_v2 | B_v2 
----+------+------+------+-----
 1  |  10  |  20  | 1000 | 2000
 2  |  11  |  21  | 1001 | 2001

Автор: Kristian Sköld Размещён: 16.05.2019 08:12
Вопросы из категории :
32x32