我有一个表,其中包含一个id (代表一个人)链接到url的行(字段名是id和url )。一个id可以链接到多个urls。可以多次将id链接到url。因此,对于表中可以找到的每个域,我希望表中每个域的I数目是相同的。如果两个域没有id交集,我不需要这些信息:我只想在交集不是null时获得信息。产出可以是:
找到的每个唯一域的
相交。
在BigQuery中可以做这样的事情吗?
谢谢你的帮助
发布于 2019-12-17 17:10:42
您将希望内部加入您的表与自身,也称为自连接。
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。
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的潜在#,这可能会创建相当大的数组,这可能不是一个好主意。
发布于 2019-12-18 12:30:33
如果rtenha解决方案不是您所要寻找的,那么您可能需要考虑一个INTERSECT。我希望我正确地理解了你的需要,如果你说如果两个域没有id交集,那么你就不需要这些信息了。
希望我的努力能帮助你实现你想要的..。
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 https://stackoverflow.com/questions/59377377
复制相似问题