Как присвоить уникальный ключ значениям с помощью функции array_agg () в bigquery - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь назначить ключ каждому значению в большом запросе с row_number. Но это дает ресурс, превышающий ошибку. Так можно ли добиться того же с помощью функции array_aggegate?

код:

select a.values 
    , a.type
    , max_key + row_number() over(order BY a.values) key
    , a.event_date
    from gaid_raw a
    LEFT JOIN  existing_key_table e
    on  e.type = a.type
    and e.values = a.values
    left join (
      select type, coalesce(max(key),0) max_key from existing_key_table group by 1
    ) e1
    on e1.type = a.type
    where e.key is null

1 Ответ

0 голосов
/ 03 мая 2019

Я не уверен, что это решит вашу проблему, но я думаю, что вам нужна такая логика:

select gr.values, gr.type
       coalesce(max_key, 0) + row_number() over (partition by gr.type order by gr.values) as key,
       gr.event_date
from gaid_raw gr left join
     (select type, max(key) as max_key
      from existing_key_table
      group by 1
     ) e
     on e.type = gr.type
where not exists (select 1
                  from existing_key_table e
                  where e.type = gr.type and e.values = gr.values
                 );

Для нераспознанных типов вам нужен coalesce() во внешнем select, а не подзапрос.

Похоже, вы также хотите назначить последовательные номера на основе типа.

Если вы все еще получаете ошибки ресурса, есть способ исправить это, но немного большенеобходима информация о данных.Однако в прошлом я использовал случайные значения для таких ключей - при условии, что упорядочение не требуется.Вероятность столкновения настолько мала, что он работал с довольно большими данными.

Теперь я бы использовал GENERATE_UUID() для уникального идентификатора.

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