Имя столбца не найдено

Я запустил новый запрос, чтобы перезаписать набор существующих таблиц. Схема таблицы изменилась как один из ожидаемых результатов. Итак, что касается схемы, был добавлен один новый столбец, а два других были удалены. Предположим, что один добавленный столбец называется 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';

Для получения дополнительной информации обратитесь к документации по схеме, используемой для оценки подстановочных таблиц.

Другие вопросы по тегам