在具有多个输入的三元组上构建 BigQuery

Posted

技术标签:

【中文标题】在具有多个输入的三元组上构建 BigQuery【英文标题】:Structuring BigQuery on trigrams with multiple inputs 【发布时间】:2015-11-25 22:01:54 【问题描述】:

目前,感谢这个question的回答者的帮助,我能够成功查询一个单词,并得到一个最受欢迎的后续单词列表。例如,使用“great”这个词,我可以得到一个最多 10 个单词的列表,格式如下:

SELECT second, SUM(cell.page_count) total 
FROM [publicdata:samples.trigrams] 
WHERE first = "great"
group by 1
order by 2 desc
limit 10

输出:

second     total     
------------------
deal       3048832   
and        1689911   
,          1576341   
a          1019511   
number     984993    
many       875974    
importance 805215    
part       739409    
.          700694    
as         628978

我目前无法弄清楚如何自动对多个单词进行此查询(而不是每次都对单独的单词调用查询),以便我可以有一个输出如:

"great"     total     "new_word_1"           new_total_1 ... "new_word_N"     new_total_N
-----------------------------------------------------------------------------------------
deal       3048832    "new_follow_on_word1"  123456      ... "follow_on_N1"   234567
and        1689911    "new_follow_on_word2"  12345       ... "follow_on_N2"   123456

基本上我可以在单个查询中调用N 的单词数(例如,new_word_1 是一个完全不同的单词,例如“棒球”,与“伟大”有 no 关系) ,并获得与不同列中每个单词相关的总计数。

此外,在了解 BigQuery 的 pricing 之后,我也无法弄清楚如何尽可能限制查询的总数据。我可以考虑仅使用最新数据(例如 2010 年以后)和每个单词 2 个字母数字输出,但可能会缺少更明显的限制符

非常感谢您提供任何帮助 - 谢谢!

【问题讨论】:

【参考方案1】:

您可以在同一个查询中放置多个第一个词,但它需要分别计算前 10 个后续词,然后将结果连接在一起。这是“伟大”和“棒球”的示例

SELECT word1, total1, word2, total2 FROM
(SELECT ROW_NUMBER() OVER() rowid1, word1, total1 FROM (
SELECT second as word1, SUM(cell.page_count) total1 
FROM [publicdata:samples.trigrams] 
WHERE first = "great"
group by 1
order by 2 desc
limit 10)) a1
JOIN
(SELECT ROW_NUMBER() OVER() rowid2, word2, total2 FROM (
SELECT second as word2, SUM(cell.page_count) total2 
FROM [publicdata:samples.trigrams] 
WHERE first = "baseball"
group by 1
order by 2 desc
limit 10)) a2
ON a1.rowid1 = a2.rowid2

【讨论】:

我刚刚删除了我的答案,因为我意识到我错过了前 10 项要求

以上是关于在具有多个输入的三元组上构建 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

具有三元运算符的多个 css 规则

所有网络端口限制在具有 dev 标签的网络安全组上

MySql 8.0.24:转储/恢复失败,嵌套视图在 DISTINCT 组上具有 ROLLUP

试图弄清楚如何将具有多个条件的长三元运算符转换为长if语句

如何在整个 Azure 管理组上运行 powershell 脚本以跨越多个订阅?

多个三元运算符