BigQuery - сводится к уникальным записям в поле - PullRequest
0 голосов
/ 28 января 2019

У меня есть таблица с такими полями:

ID    Field 1           Field 2
1     22,34,05,44,44    01,02,02,03
2     11,01,05          02,02,01,01,22

Как я могу преобразовать ее в BigQuery (strandardSQL), чтобы показывать только уникальные записи и сортировать из больших в маленькие?

Итакчто результат будет выглядеть следующим образом:

ID    Field 1           Field 2
1     05,22,34,44       01,02,03
2     01,05,11          01,02,22

Я пробовал с Split, но затем я запускаю сотни дубликатов, также функции window не позволяют distinct объединять вещипозже вместе.

Пожалуйста, помогите разобраться

1 Ответ

0 голосов
/ 28 января 2019

Вы можете разделить строки, чтобы превратить их в массивы, затем дедуплицировать с помощью DISTINCT и отсортировать с помощью ORDER BY:

SELECT
  ID,
  ARRAY(SELECT DISTINCT x FROM UNNEST(SPLIT(field1, ',')) AS x ORDER BY x) AS field1,
  ARRAY(SELECT DISTINCT x FROM UNNEST(SPLIT(field2, ',')) AS x ORDER BY x) AS field2
FROM `project-name`.dataset.table

Если вы хотите снова превратить массивы в разделенные запятыми строки,Вы можете использовать функцию ARRAY_TO_STRING:

SELECT
  ID,
  ARRAY_TO_STRING(ARRAY(SELECT DISTINCT x FROM UNNEST(SPLIT(field1, ',')) AS x ORDER BY x), ',') AS field1,
  ARRAY_TO_STRING(ARRAY(SELECT DISTINCT x FROM UNNEST(SPLIT(field2, ',')) AS x ORDER BY x), ',') AS field2
FROM `project-name`.dataset.table
...