首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当交集不为空时,如何获取信息?

问当交集不为空时,如何获取信息?
EN

Stack Overflow用户
提问于 2019-12-17 15:28:38
回答 2查看 225关注 0票数 0

我有一个表,其中包含一个id (代表一个人)链接到url的行(字段名是id和url )。一个id可以链接到多个urls。可以多次将id链接到url。因此,对于表中可以找到的每个域,我希望表中每个域的I数目是相同的。如果两个域没有id交集,我不需要这些信息:我只想在交集不是null时获得信息。产出可以是:

找到的每个唯一域的

  • 1行,包含域和一个元组(域、卷)数组,表示两个域之间的交集和每个域之间的卷相交--在每个域中,交集不是空的--
  • --只与domain1、domain2、交集卷

相交。

在BigQuery中可以做这样的事情吗?

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2019-12-17 17:10:42

您将希望内部加入您的表与自身,也称为自连接。

代码语言:javascript
复制
select
  d1.url as url_1 as primary_url,
  d2.url as url_2 as linked_url,
  count(distinct id) as shared_count -- note this gets unique matches, not the total matches
from <dataset.table> d1
inner join <dataset.table> d2 using(id)
where d2.url is not null
group by 1,2

若要将链接的urls放入数组中,请将其放入CTE并使用array_agg。

代码语言:javascript
复制
with temp as(
  ... query from above
)
select primary_url, array_agg(struct(linked_url,shared_count)) as linked_urls
from temp
group by 1

根据链接urls的潜在#,这可能会创建相当大的数组,这可能不是一个好主意。

票数 0
EN

Stack Overflow用户

发布于 2019-12-18 12:30:33

如果rtenha解决方案不是您所要寻找的,那么您可能需要考虑一个INTERSECT。我希望我正确地理解了你的需要,如果你说如果两个域没有id交集,那么你就不需要这些信息了。

希望我的努力能帮助你实现你想要的..。

代码语言:javascript
复制
WITH tmp as (
(SELECT *
from `project:dataset.table`)
INTERSECT DISTINCT

(SELECT * FROM `project:dataset.table`)
)

SELECT count(*), field1, field2 FROM  tmp GROUP BY field1, field2 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59377377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档