我运行了新查询以覆盖一组现有表。表模式已更改为预期结果之一。因此,在架构中,添加了一个新列,另外两个列被删除。假设添加的一列名为A
几分钟后,当我查询时:
select A
from 'table_*'
WHERE _TABLE_SUFFIX = '20170831'
我收到了错误:Name A not found
但是这个查询才有效:
select A
from 'table_20170831'
只是想知道为什么。因为我真的需要使用_TABLE_SUFFIX .....来查询更长的时间。
答案 0 :(得分:2)
只是想知道为什么
您收到此错误的原因是因为架构是由最早的可用分片表标识的 - 所以在您的情况下,这意味着在最早的表(table_ *)中没有/没有名为A的字段
要解决此问题 - 我建议创建具有最低日期和模式的虚拟表,该模式包含您计划查询的所有字段
答案 1 :(得分:1)
这是因为*
匹配的表不包含新添加的列,并且通配符表的模式来自"最新的"表基于其创建时间。例如,您可能有:
在这种情况下,*
将与第二个表匹配。要解决此问题,请使用更长的前缀,例如:
SELECT *
FROM `table_2017*`
WHERE _TABLE_SUFFIX >= '0831';
如需更多阅读,请参阅the schema used for evaluation of wildcard tables上的文档。