#google-bigquery
# #google-bigquery
Вопрос:
У меня есть импорт bigquery из базы данных firestore, где я хочу запросить определенное поле из документа. Это было заполнено с помощью расширения firestore-bigquery, и данные документа хранятся в виде строки JSON.
Я пытаюсь использовать предложение WHERE в своем запросе, в котором используется одно из полей из данных JSON. Однако, похоже, это не работает.
Мой запрос выглядит следующим образом:
SELECT json_extract(data,'$.title') as title,p
FROM `table`
left join unnest(json_extract_array(data, '$.tags')) as p
where json_extract(data,'$.title') = 'technology'
data
является объектом JSON и title
является атрибутом всех элементов. Приведенный выше запрос будет выполнен, но не даст «никаких результатов» (там определенно есть результаты для рассматриваемого заголовка, поскольку они отображаются в предварительном просмотре таблицы).
Я также пытался использовать WHERE title = 'technology'
, но это возвращает ошибку, которая title
является нераспознанным полем (отсюда и json_extract ).
Из моих исследований это должно работать как стандартный запрос SQL JSON, но, похоже, не работает в Bigquery. Кто-нибудь знает способ обойти это?
Все, что я могу придумать, это поместить результаты в другую таблицу, но я не знаю, является ли это приемлемым решением, поскольку данные обновляются через расширение при обновлении, поэтому мне нужно будет постоянно обновлять и мою вторую таблицу.
Редактировать Мне интересно, поможет ли в этом настройка представления? Хотя, в конечном счете, я хотел бы запросить это на основе разных параметров и документов здесь https://cloud.google.com/bigquery/docs/views предположим, вы не можете ссылаться на параметры запроса в представлении
Ответ №1:
С тех пор мне удалось разобраться с этим, и я поделюсь решением для всех, у кого такая же проблема.
Решение состояло в том, чтобы использовать JSON_VALUE
в предложении WHERE вместо этого, например:
where JSON_VALUE(data,'$.title') = 'technology';
Я все еще не уверен, что это лучший способ сделать это с точки зрения производительности и стоимости, поэтому я подожду, чтобы узнать, оставит ли кто-нибудь еще лучший ответ.