DISTINCT в массиве STRUCT в Bigquery - PullRequest
1 голос
/ 20 апреля 2019

Я ищу способ сделать массив структур уникальным.Вот пример таблицы.

-------------------------------------

В это enter image description here

Я нашел только похожий вопрос здесь , но я думаю, что он обслуживает только 1 вложенный повторный столбец.Но что, если таблицы содержат 2 или более вложенных повторяющихся столбца?В этом случае столбец country и product.

1 Ответ

3 голосов
/ 21 апреля 2019

Но что, если таблицы содержат 2 или более вложенных повторяющихся столбца?

Ниже для BigQuery Standard SQL

#standardSQL
SELECT * REPLACE(
  (SELECT ARRAY_AGG(STRUCT(id, total_visit_count))
  FROM (SELECT DISTINCT id, total_visit_count FROM UNNEST(country) c
  )) AS country,
  (SELECT ARRAY_AGG(STRUCT(name, total_visit_count))
  FROM (SELECT DISTINCT name, total_visit_count FROM UNNEST(product) c
  )) AS product
)
FROM `project.dataset.table`   

Если у вас есть больше столбцов для дедупликации - вы можете просто повторить выше для каждого такого столбца

ИЛИ, вы можете использовать SQL UDF для инкапсуляции логики дедупликации в одном месте, как в примере ниже

#standardSQL
CREATE TEMP FUNCTION dedup(val ANY TYPE) AS ((
  SELECT ARRAY_AGG(t)
  FROM (SELECT DISTINCT * FROM UNNEST(val) v) t
));
SELECT * REPLACE(
  dedup(country) AS country,
  dedup(product) AS product
)
FROM `project.dataset.table`

Очевидно, что последний будет моим выбором: o)

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