【发布时间】:2016-01-14 17:50:32
【问题描述】:
我正在尝试根据重复字段中的项目是否位于另一个表的列中来从一个表中选择记录。当我在我的代码中明确列出我正在测试的项目时,我已经能够做到这一点,但在从另一个表中选择时却不行。让我演示一下使用 trigrams 数据集:
假设我想选择在特定年份出现的所有记录。但我不只是想要那些年的数据——我想要与这些记录相关的所有数据。如果我只想要几年的数据,我可以做这样的事情(而且这很有效):
SELECT ngram, first, second, third, fourth, fifth, cell.value, cell.volume_count,
SOME(cell.value in ('1800', '1801')) WITHIN RECORD AS valid
FROM [publicdata:samples.trigrams]
HAVING valid
但是,我没有将“1800”和“1801”编码到我的查询中,而是有一个表years,其中包含我感兴趣的一组年份。我希望它能够工作:
SELECT ngram, first, second, third, fourth, fifth, cell.value, cell.volume_count,
SOME(cell.value in (SELECT year_as_str FROM [mydataset.years])) WITHIN RECORD AS valid
FROM [publicdata:samples.trigrams]
HAVING valid
这不起作用,因为 bigquery 要求半联接是 WHERE 或 HAVING 子句的一部分。
所以我尝试重新排列(回到第一个查询):
SELECT ngram, first, second, third, fourth, fifth, cell.value, cell.volume_count
FROM [publicdata:samples.trigrams]
HAVING SOME(cell.value in ('1801', '1802')) WITHIN RECORD
这会导致错误Encountered " "WITHIN" "WITHIN "" ... Was expecting <EOF>
所以现在没有WITHIN RECORD:
SELECT ngram, first, second, third, fourth, fifth, cell.value, cell.volume_count
FROM [publicdata:samples.trigrams]
HAVING SOME(cell.value in ('1801', '1802'))
这会导致错误SELECT clause has mix of aggregations '...' and fields '...' without GROUP BY clause
但我没有汇总!所以现在我将过滤器移动到WHERE:
SELECT ngram, first, second, third, fourth, fifth, cell.value, cell.volume_count
FROM [publicdata:samples.trigrams]
WHERE SOME(cell.value in ('1801', '1802'))
这告诉我Invalid function name: SOME。什么?!
有没有办法通过 BigQuery 获得我正在寻找的行为?
【问题讨论】:
标签: google-bigquery