Запрос BigQuery, генерировать комбинации и рассчитывать пересечение - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть таблица, похожая на эту в BigQuery:

enter image description here

Первое поле id, второе поле url. Одна строка представляет кого-то (идентификатор), который посетил URL. Допустим, мои URL-адреса url1, url2, url3. Я хотел бы знать, сколько уникальных идентификаторов посетило хотя бы один раз следующие наборы URL-адресов:

(url1, url2)
(url1, url3)
(url2, url3)
(url1, url2, url3)

Как правило, получают количество идентификаторов, связанных со всеми комбинациями URL-адресов, из списка URL-адресов, но только когда количество посещенных URL-адресов не равно 0. Я ожидаю, что это даст очень большой вывод для большого списка URL-адресов. Могу ли я написать запрос в BigQuery, который поможет решить эту проблему? Может быть оператор, который может генерировать все комбинации для моего ввода?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 17 февраля 2020

Может быть оператор, который может генерировать все комбинации для моего ввода?

Да, вы можете использовать функцию ML.NGRAMS, как в приведенном ниже упрощенном примере

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, 'url1' url UNION ALL
  SELECT 2, 'url2' UNION ALL
  SELECT 3, 'url2' UNION ALL
  SELECT 2, 'url1' UNION ALL
  SELECT 3, 'url2' UNION ALL
  SELECT 2, 'url3'
)
SELECT tuple FROM (  
  SELECT ARRAY_AGG(DISTINCT url) urls
  FROM `project.dataset.table`
), UNNEST(ML.NGRAMS(urls, [1,3], ',')) tuple

с выходом

Row tuple    
1   url1     
2   url1,url2    
3   url1,url2,url3   
4   url2     
5   url2,url3    
6   url3     

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

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