Как объединить два столбца в массивы в BigQuery? - PullRequest
0 голосов
/ 15 января 2020

Скажем, у меня есть таблица с 4 столбцами, a типа string, b типа integer, c типа integer и d типа integer. Как бы я go вперед и использовал что-то вроде ARRAY_AGG для STRUCT(b, c) и d по отдельности (другими словами, иметь два отдельных столбца, которые были бы массивами)?

Запрос у меня так far:

SELECT table1.a, table1.x, table2.y
FROM (
  SELECT a, ARRAY_AGG(STRUCT(b, c)) AS x
  FROM project.table
  GROUP BY a
  ORDER BY a
) AS table1
LEFT OUTER JOIN (
  SELECT a, ARRAY_AGG(d) AS y
  FROM project.table
  GROUP BY a, d
  ORDER BY a, d
) table2 ON table1.a = table2.a
GROUP BY table1.a
ORDER BY table1.a;

Это дает мне ошибку: SELECT list expression references table1.x which is neither grouped nor aggregated at [1:20]

Но если я пытаюсь добавить table1.x к предложению GROUP BY в конце, я получаю новую ошибку : Grouping by expressions of type ARRAY is not allowed at [14:22]

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT a, 
  ARRAY(
    SELECT AS STRUCT b, c FROM t.x GROUP BY b, c
  ) AS x, y
FROM (
  SELECT a,  
    ARRAY_AGG(STRUCT(b, c)) AS x, 
    ARRAY_AGG(DISTINCT d) AS y
  FROM `project.dataset.table`
  GROUP BY a
) t
0 голосов
/ 15 января 2020

Почему бы просто не сделать это в одном запросе?

SELECT a, ARRAY_AGG(STRUCT(b, c)) AS x, ARRAY_AGG(DISTINCT d) AS y
FROM project.table
GROUP BY a
ORDER BY a;

Ваша версия будет работать без внешнего GROUP BY. Но это излишне сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...