繁体   English   中英

BigQuery是否存在表查询不起作用?

[英]BigQuery if table exists query not working?

我正在处理一个查询,该查询将根据是否找到表返回不同的结果。 这是我的查询:

SELECT 
  SUM(IF(COUNT(table_id) > 0, 1, 0)) AS found
FROM `table.__TABLES__` 
WHERE table_id = 'app_events_20170207'

我遇到的问题是

错误:[2:3]不允许聚合

我可能缺少一些简单的东西,但似乎无法查明。 任何帮助将是巨大的,谢谢!

最终产品将是一个查询,基于是否找到该表,运行一个查询,否则,运行另一个查询。

例如使用伪代码:

if (count(table_id) > 0, select * from table1, select * from table2)

您这里有聚合而不是聚合-这显然不起作用
另一方面,您可以通过以下方式轻松实现所需的工作-计算找到的表格

SELECT 
  COUNT(table_id) AS found
FROM `table.__TABLES__` 
WHERE table_id = 'app_events_20170207'  

回答更新的问题

假设(select from from table1)和(select * from table2)的输出具有相同的架构-您可以使用以下内容

#standardSQL
WITH switch AS (
  SELECT 
    COUNT(table_id) AS found
  FROM `table.__TABLES__` 
  WHERE table_id = 'app_events_20170207'  
)
SELECT * FROM table1 WHERE ((SELECT MAX(found) FROM switch) > 0)
UNION ALL
SELECT * FROM table2 WHERE ((SELECT MAX(found) FROM switch) = 0)  

您可以检查以下虚拟数据的行为:

#standardSQL
WITH table1 AS (
  SELECT 1 AS a, 2 AS b
),
table2 AS (
  SELECT 3 AS a, 4 AS b
),
switch AS (
  SELECT 
    COUNT(table_id) AS found
  FROM `table.__TABLES__` 
  WHERE table_id = 'app_events_20170207'  
)
SELECT * FROM table1 WHERE ((SELECT MAX(found) FROM switch) > 0)
UNION ALL
SELECT * FROM table2 WHERE ((SELECT MAX(found) FROM switch) = 0)  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM