У меня есть такая таблица наборов данных в Google Big Query:
| col1 | col2 | col3 | col4 | col5 | col6 |
-------------------------------------------
| a1 | b1 | c1 | d1 | e2 | f1 |
| a2 | b2 | c2 | d1 | e2 | f2 |
| a1 | b3 | c3 | d1 | e3 | f2 |
| a2 | b1 | c4 | d1 | e4 | f2 |
| a1 | b2 | c5 | d1 | e5 | f2 |
Скажем, заданное пороговое число равно 4, в этом случае я хочу преобразовать его в одну из приведенных ниже таблиц:
| col1 | col2 | col4 | col5 | col6 |
---------------------------------------------------------------------
| [a1,a2] | [b1,b2,b] | [d1] |[e2,e3,e4,e5]| [f1,f2] |
Или вот так:
| col | values |
------------------------
| col1 | [a1,a2] |
| col2 | [b1,b2,b] |
| col4 | [d1] |
| col5 | [e2,e3,e4,e5] |
| col6 | [f1,f2] |
Обратите внимание, что столбец col3 был удален, поскольку он содержал более 4 (пороговых) различных значений. Я изучил множество документов здесь , но не смог выяснить требуемый запрос. Может ли кто-нибудь помочь или указать в правильном направлении?
Редактировать: Я имею в виду одно решение, где я делаю что-то вроде этого:
select * from (select 'col1', array_aggregate(distinct col1) as values union all
select 'col2', array_aggregate(distinct col2) as values union all
select 'col3', array_aggregate(distinct col3) as values union all
select 'col4', array_aggregate(distinct col4) as values union all
select 'col5', array_aggregate(distinct col5) as values) X where array_length(values) > 4;
Это даст мне второй результат, но требует сложная конструкция запроса при условии, что я не знаю числа и имен столбцов заранее. Кроме того, это может пересекать ограничение в 100 МБ на строку для таблицы BigQuery, поскольку у меня будет более миллиарда строк в таблице. Просьба также предложить, если есть лучший способ сделать это.