【问题标题】:BigQuery request, generate combinations and calculate intersectionBigQuery 请求、生成组合并计算交集
【发布时间】:2020-02-15 15:10:53
【问题描述】:

我在 BigQuery 中有一个如下所示的表:

第一个字段是id,第二个字段是url。 一行代表访问过 URL 的人(ID)。 假设我的网址是url1, url2, url3。我想知道有多少个唯一 ID 至少访问过以下 URL 元组:

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

基本上,从urls列表中获取链接到所有url组合的id的数量,但只有当访问的url数量不为0时。 我希望它能够为大量 url 提供非常大的输出。我可以在 BigQuery 中编写有助于解决此问题的请求吗? 可能是一个可以为我的输入生成所有组合的运算符?

感谢您的帮助

【问题讨论】:

  • 你必须在后面实现一些特定的逻辑,Bigquery 中没有专门的子句可以解决这个期望。有关参考请查看此thread,应用 UDF 来提供单个列的值组合。是不是你会感兴趣?

标签: sql google-bigquery


【解决方案1】:

可能是一个可以为我的输入生成所有组合的运算符?

是的,您可以使用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     

然后您可以将其用作最终计算的输入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多