2017-09-05 85 views
0

我运行了新的查询来覆盖一组现有的表。表格模式作为预期结果之一而改变。因此,就架构而言,添加了一个新列,并删除了另外两个列。假设添加名为A列名未找到

一两分钟后,一列,当我查询:

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

我曾错误:Name A not found

但此查询只是工作:

select A 
from 'table_20170831' 

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

回答

2

Just wondering why

为什么您收到此错误的原因是因为该模式被识别由最早的可用分片表 - 所以在你的情况下,它意味着在最早的表(table_ *)有/无场命名为A

要解决此 - 我会建议建立以最低的日期与架构虚表是由您计划查询

所有领域
+0

所以你说table_ *后缀为20170831与table_20170831不同?我不认为我真的明白这一点...... – foxwendy

+0

我今天早些时候通过添加一列来对此表做了同样的事情。一切正常。直到这一次,我同时删除了另外两列...... – foxwendy

+0

我在说的是 - 当你使用'table_ *'bigquery引擎扫描带有该前缀的所有表并且根据最早的一个标识方案 –

1

这是因为*与不包含新添加的列的表匹配ns,并且通配表的架构来自基于其创建时间的“最新”表。例如,你可以有:

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

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

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

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