我是Google Big Query(和Stack Overflow)的新手,主要测试Big Query管理精心设计和精心设计的查询的速度.
我在MySQL上运行(缓慢)的繁琐查询时遇到了困难.Big Query抱怨GROUP BY内容.这是起始查询:
SELECT nonstops.term, nonstops.lincat, nonstops.id,
MIN(
(1-((LEAST(1,minusone.catimp / nonstops.catimp) + LEAST(1,minusone.catweb / nonstops.catweb))/2))*
(1-((LEAST(1,minusone.catimp / nonstops.catimp) + LEAST(1,minusone.catweb / nonstops.catweb))/2))*
(1-((LEAST(1,minusone.catimp / nonstops.catimp) + LEAST(1,minusone.catweb / nonstops.catweb))/2))*
(nonstops.catweb * nonstops.catweb * nonstops.catimp / nonstops.fnvweb / nonstops.fnvimp)
)
AS calc FROM nonstops INNER JOIN EACH minusone ON nonstops.lincat = minusone.lincat AND nonstops.term = minusone.term
WHERE nonstops.lincat = 556 GROUP BY nonstops.term, nonstops.lincat
ORDER BY `calc` DESC
Run Code Online (Sandbox Code Playgroud)
请注意,"EACH"会添加到INNER JOIN中,因为两个表都很大.我删除了数据集名称以便于阅读.
GROUP BY旨在仅返回每个术语/ lincat对的连接所做计算的最低值.
我得到的错误是:
(L1:62):表达式"phrase.nonstops.id"不存在于GROUP BY列表中
我不想在GROUP BY中,但我添加了它然后我得到:
calcGROUP BY列表中不存在表达式' '
我也不想要!但如果我添加它,我得到:
(L7:1):不能按聚合分组
我查看了文档并搜索了答案,但没有运气.任何提示或链接将是最受欢迎的.
当您在 BigQuery(或任何 SQL)中按某些内容进行分组时,结果字段应该是分组字段或聚合。
否则,您应该获得 nonstops.id 的哪个值?可能有许多与一对(nonstops.term,nonstops.lincat)相关联。
您可以选择 id 字段的 max、min 等;按此字段分组(但随后您会得到 term、lingcat 和 id 的每个元组的计算);或者如果您不需要它,则删除此字段 - 如果您想要每个 (nonstops.term, nonstops.lincat) 对的 'calc' 表达式的结果。
BigQuery 抱怨“calc”的原因有所不同 - BigQuery(当您使用旧版 SQL 方言时)不使用反引号 (`) 进行引用。因此它认为它们是名称的一部分,并且它是与“calc”字段分开的新字段。只需删除它们或使用 BigQuery 的引号 [ 和 ] - 即可[calc]。或者切换到标准 SQL 方言。
| 归档时间: |
|
| 查看次数: |
6819 次 |
| 最近记录: |