Имя столбца не найдено
Я запустил новый запрос, чтобы перезаписать набор существующих таблиц. Схема таблицы изменилась как один из ожидаемых результатов. Итак, что касается схемы, был добавлен один новый столбец, а два других были удалены. Предположим, что один добавленный столбец называется A
Через пару минут, когда я запрашиваю:
select A
from 'table_*'
WHERE _TABLE_SUFFIX = '20170831'
У меня была ошибка: Name A not found
Но этот запрос просто работал:
select A
from 'table_20170831'
Просто интересно почему. Потому что мне действительно нужно запросить в течение более длительного периода времени с помощью _TABLE_SUFFIX.....
2 ответа
Просто интересно почему
Причина, по которой вы получаете эту ошибку, заключается в том, что схема идентифицируется самой ранней доступной заштрихованной таблицей - поэтому в вашем случае это означает, что в самой ранней таблице (table_*) нет / не было поля с именем A
Чтобы обойти это, я бы порекомендовал создать фиктивную таблицу с самой низкой датой и со схемой, состоящей из всех полей, которые вы планируете запросить.
Это потому что *
соответствует таблице, которая не содержит вновь добавленные столбцы, а схема таблицы с подстановочными знаками берется из "последней" таблицы в зависимости от времени ее создания. Например, вы можете иметь:
- table_20170831: содержит два новых столбца
- table_foo: не содержит двух новых столбцов
В этом случае *
будет соответствовать второй таблице. Чтобы исправить это, используйте более длинный префикс, такой как:
SELECT *
FROM `table_2017*`
WHERE _TABLE_SUFFIX >= '0831';
Для получения дополнительной информации обратитесь к документации по схеме, используемой для оценки подстановочных таблиц.