2017-09-05 65 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