Bigquery не может вернуть правильные данные из таблицы при запросе с использованием подстановочного запроса
Мы используем Looker (решение для панели мониторинга и создания отчетов) для создания постоянных производных таблиц в BigQuery. Для обычных запросов это обычные таблицы, но именование соответствует стандарту looker (он создает хэш на основе DB + SQL и т. Д.) И присваивает соответствующую таблицу именам. Эти таблицы генерируются через просмотр в запланированное время ежедневно. Имена таблиц в BigQuery выглядят так, как показано ниже.
table_id
LR_Z504ZN0UK2AQH8N2DOJDC_AGG__table1
LR_Z5321I8L284XXY1KII4TH_MART__table2
LR_Z53WLHYCZO32VK3FWRS2D_JND__table3
Если я запрашиваю результирующую таблицу в BQ по явному имени, тогда результат возвращается, как и ожидалось.
select * from `looker_scratch.LR_Z53WLHYCZO32VK3FWRS2D_JND__table3`
Looker изменяет значение хеш-функции в имени таблицы, когда таблица регенерируется после изменения запроса / задания. Поэтому я хотел создать представление с запросом таблицы подстановочных знаков, чтобы сделать изменения в имени таблицы прозрачными для внешнего мира.
Но приведенный ниже запрос всегда дает сбой.
SELECT *
FROM \`looker_scratch.LR_*\`
where _table_suffix like '%JND__table3'
Я получаю совершенно случайную схему с нулевыми значениями или ошибками, такими как:
Error: Cannot read field 'reportDate' of type DATE as TIMESTAMP_MICROS
Нет суффиксов конфликтующих таблиц, и я использовал все виды проверок регулярных выражений (нижний, содержит и т. Д.)
Это происходит потому, что имена таблиц содержат хеш-значения? Я выполнил несколько тестов для других наборов данных, и проблем абсолютно не было, мы долгое время выполняли запросы с подстановочными таблицами и не сталкивались ни с какими проблемами.
Пожалуйста, поделись своими мыслями.
1 ответ
Когда вы используете подстановочный знак, как показано ниже
`looker_scratch.LR_*`
вы на самом деле ищете ВСЕ таблицы с этим префиксом и чем - когда вы применяете пункт ниже
LIKE '%JND__table3'
вы далее фильтруете таблицы с таким суффиксом
Итак, хитрость в том, что самая первая (хронологически) таблица определяет схему вашего вывода
Чтобы решить вашу проблему - проверьте, есть ли больше таблиц, которые соответствуют вашему запросу, и посмотрите на самую первую (ту, которая была создана первой)