使用通配符查询查询时,Bigquery无法从表返回正确的数据

时间:2017-09-25 19:19:07

标签: google-bigquery looker

我们使用Looker(仪表板/报告解决方案)在BigQuery中创建持久性派生表。就bigquery而言,这些是普通表,但命名是根据looker标准(它根据DB + SQL等创建一个哈希)并相应地命名表。这些表是每天在预定时间内通过视图生成的。 BigQuery中的表名如下所示。

table_id 

LR_Z504ZN0UK2AQH8N2DOJDC_AGG__table1         
LR_Z5321I8L284XXY1KII4TH_MART__table2

LR_Z53WLHYCZO32VK3FWRS2D_JND__table3     

如果我使用显式名称在BQ中查询结果表,则会按预期返回结果。

select * from `looker_scratch.LR_Z53WLHYCZO32VK3FWRS2D_JND__table3`

在查询/作业更改后重新生成表时,Looker会更改表名中的哈希值。因此,我想创建一个带有通配符表查询的视图,以使表名中的更改对外部世界透明。

但是下面的查询总是失败。

SELECT * 
FROM \`looker_scratch.LR_*\` 
where _table_suffix like '%JND__table3'

我要么得到一个完全随机的模式,其中包含空值或错误,例如:

Error: Cannot read field 'reportDate' of type DATE as TIMESTAMP_MICROS

没有冲突表后缀,我使用了各种正则表达式检查(lower,contains等)

这是否发生,因为表名中包含哈希值?我已经对其他数据集进行了多次测试,并且完全没有问题,我们已经运行了很长时间的通配符表查询,并且没有遇到任何问题。

请让我知道你的想法。

1 个答案:

答案 0 :(得分:2)

当您使用下面的通配符时

Scoped

您实际上正在查找具有此前缀的所有表格,而不是 - 当您应用以下条款

`looker_scratch.LR_*`   

您进一步在具有此类后缀的表格中进行过滤

所以这里的技巧是第一个(按时间顺序)表定义输出的模式

解决您的问题 - 验证是否有更多的表符合您的查询,而不是查看第一个(首先创建的表)