Google bigquery 如何在大查询的标准SQL中为特定分区使用通配符查询多个表

Google bigquery 如何在大查询的标准SQL中为特定分区使用通配符查询多个表,google-bigquery,Google Bigquery,我试图使用通配符在BigQuery中查询多个表(我有来自[0-9]后缀的表) 此特定表的查询工作如下: SELECT count(*) FROM `maw_qa.rt_content_secondly_0` where _PARTITIONTIME = timestamp('2017-01-24'); 但这并不是: SELECT count(*) FROM `maw_qa.rt_content_secondly_*` where _PARTITIONTIME = timestamp('20

我试图使用通配符在BigQuery中查询多个表(我有来自[0-9]后缀的表)

此特定表的查询工作如下:

SELECT 
count(*)
FROM `maw_qa.rt_content_secondly_0`
where _PARTITIONTIME = timestamp('2017-01-24');
但这并不是:

SELECT 
count(*)
FROM `maw_qa.rt_content_secondly_*`
where _PARTITIONTIME = timestamp('2017-01-24');
错误: 查询失败 错误:无法识别的名称:_PARTITIONTIME在[5:7]

我使用的是标准SQL。传统SQL甚至不在查询中使用通配符*

正确执行此操作的方法是什么?

当您查询时,不需要使用
.*
语法,该语法是为表通配符保留的(您在
\u table\u后缀
上进行筛选)。在您的情况下,您只需执行以下操作:

SELECT 
count(*)
FROM `maw_qa.rt_content_secondly`
where _PARTITIONTIME = '2017-01-24';

看起来通配符和分区在查询中不起作用

试试下面。它在BigQuery遗留SQL中,因为在这个版本中,它没有那么繁杂
假设您有4个表,如果更多,您需要在这里登记所有表

SELECT COUNT(*)
FROM 
  [maw_qa.rt_content_secondly_0],
  [maw_qa.rt_content_secondly_1], 
  [maw_qa.rt_content_secondly_2], 
  [maw_qa.rt_content_secondly_3]
WHERE _PARTITIONTIME = TIMESTAMP('2017-01-24')  
当然,类似的代码也可以用BigQuery标准SQL编写,但它需要使用UNIONALL等进行更多的键入

对于标准SQL,它可以如下所示

SELECT COUNT(*) FROM (
  SELECT * FROM `maw_qa.rt_content_secondly_0` WHERE _PARTITIONTIME = TIMESTAMP('2017-01-24') UNION ALL
  SELECT * FROM `maw_qa.rt_content_secondly_1` WHERE _PARTITIONTIME = TIMESTAMP('2017-01-24') UNION ALL 
  SELECT * FROM `maw_qa.rt_content_secondly_2` WHERE _PARTITIONTIME = TIMESTAMP('2017-01-24') UNION ALL 
  SELECT * FROM `maw_qa.rt_content_secondly_3` WHERE _PARTITIONTIME = TIMESTAMP('2017-01-24')   
)

Elliott,这些表不是模板表。因此,不带*的查询给了我错误:错误:找不到:表maw bigquery:maw_qa.rt_content_第二次使用分区创建模板表将是完美的。但似乎不支持在模板表上有分区-酷!谢谢澄清-我希望这会对每个表应用分区过滤。是这样吗?另外,如果需要在标准SQL上执行联合操作,它是否会类似,并在每个表上应用分区?嗨,Mikhail,你能举一个如何使用标准SQL的例子吗?我正在尝试使用UNION,但我是否必须在每个表中选择的每个表上都有_PARTITIONTIME或任何其他列名?这很重要-您可以对答案进行投票。投票选出有帮助的答案。还有更多。。。当有人回答你的问题时,你可以检查一下该做什么。