找不到列名

时间:2017-09-05 19:20:48

标签: google-bigquery

我运行了新查询以覆盖一组现有表。表模式已更改为预期结果之一。因此,在架构中,添加了一个新列,另外两个列被删除。假设添加的一列名为A

几分钟后,当我查询时:

select A
from 'table_*'
WHERE _TABLE_SUFFIX = '20170831'

我收到了错误:Name A not found

但是这个查询才有效:

select A
from 'table_20170831'

只是想知道为什么。因为我真的需要使用_TABLE_SUFFIX .....来查询更长的时间。

2 个答案:

答案 0 :(得分:2)

  

只是想知道为什么

您收到此错误的原因是因为架构是由最早的可用分片表标识的 - 所以在您的情况下,这意味着在最早的表(table_ *)中没有/没有名为A的字段

要解决此问题 - 我建议创建具有最低日期和模式的虚拟表,该模式包含您计划查询的所有字段

答案 1 :(得分:1)

这是因为*匹配的表不包含新添加的列,并且通配符表的模式来自"最新的"表基于其创建时间。例如,您可能有:

  • table_20170831:包含两个新列
  • table_foo:不包含两个新列

在这种情况下,*将与第二个表匹配。要解决此问题,请使用更长的前缀,例如:

SELECT *
FROM `table_2017*`
WHERE _TABLE_SUFFIX >= '0831';

如需更多阅读,请参阅the schema used for evaluation of wildcard tables上的文档。