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'   

вы далее фильтруете таблицы с таким суффиксом

Итак, хитрость в том, что самая первая (хронологически) таблица определяет схему вашего вывода

Чтобы решить вашу проблему - проверьте, есть ли больше таблиц, которые соответствуют вашему запросу, и посмотрите на самую первую (ту, которая была создана первой)

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