我正在尝试使用通配符查询BigQuery中的多个表(我有来自_ [0-9]后缀的表)
特定表的查询有效:
snippet
但这不是:
SELECT
count(*)
FROM `maw_qa.rt_content_secondly_0`
where _PARTITIONTIME = timestamp('2017-01-24');
错误: 查询失败 错误:无法识别的名称:[5:7] _PARTITIONTIME
我正在使用标准SQL。 Legacy SQL甚至不在查询中使用通配符*。
正确执行此操作的方法是什么?
答案 0 :(得分:2)
看起来通配符和分区在查询中不能一起工作
请尝试以下操作。它在BigQuery Legacy 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 Standard SQL编写,但需要用UNION ALL等进行更多的输入。
对于标准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')
)
答案 1 :(得分:0)
当您查询partitioned table时,您不需要使用_*
语法,该语法是为表通配符(在_TABLE_SUFFIX
上过滤的地方)保留的。在你的情况下,你应该这样做:
SELECT
count(*)
FROM `maw_qa.rt_content_secondly`
where _PARTITIONTIME = '2017-01-24';