Это не в полной мере решает вашу проблему, но, по крайней мере, более логично формулирует логику.
Вы запрашиваете не ту таблицу для этой проблемы. Вместо этого:
with pt as (
select pt.tagid, pt.postid, t.tagname
from posttags pt join
tags t
on pt.tagid = t.id
)
select pt.tagname, pt2.tagname, count(*)
from pt join
pt pt2
on pt.postid = pt2.postid and
pt.tagname < pt2.tagname
group by pt.tagname, pt2.tagname
order by count(*) desc;
Вы по-прежнему ограничены 50 000 строк, но вы позволяете базе данных выполнять большую часть работы.
StackOverflow SEDE ограничен 50 000 строк. Это просто, как это работает. Несколько лет назад они перенесли данные в BigQuery, к сожалению, немного изменив схему (мне было бы очень интересно узнать, почему).
В любом случае вы можете вернуть большие наборы результатов на BQ. Эквивалентный запрос:
#standardSQL
with pt as (
select pq.*, tag
from `bigquery-public-data.stackoverflow.posts_questions` pq cross join
unnest(split(pq.tags, '|')) tag
)
select pt.tag as tag1, pt2.tag as tag2, count(*) as cnt
from pt join
pt pt2
on pt2.id = pt.id and pt.tag < pt2.tag
group by 1, 2
order by count(*) desc;
Возвращает все 4 689 465 строк результатов, которые можно сохранить в таблице BigQuery или экспортировать в файл и переместить в другую среду.
Вы можете зарегистрировать учетную запись BigQuery и запустить ее.