#sql #struct #google-bigquery
#sql #структура #google-bigquery
Вопрос:
Когда я запускаю этот запрос в bigquery
select jsonpayload.context.input.step
from `table_2019*`
ответить
«Шаг имени поля не существует в СТРУКТУРЕ в [1: 34]»
Однако при выполнении того же запроса для других таблиц, таких как table_20190101 или table_20190102, он работал нормально
Как я могу исправить свой код, чтобы показывать все результаты без ошибок или игнорировать ошибку спасибо.
Ответ №1:
Как я могу исправить свой код, чтобы показывать все результаты без ошибок? Проблема не в вашем коде SQL
Вы выполняете запрос к старому разделу, что означает, что физическая структура каждого раздела может отличаться. Судя по сообщению об ошибке, по крайней мере в 1 из этих разделов нет шага поля, в то время как в другом есть.
Вариант 1
Самый простой способ найти это — использовать WebUI для просмотра структуры разделов и найти пробел
Вариант 2
Если вы подписаны на бета-версию INFORMATION_SCHEMA, вы можете запустить этот запрос, чтобы понять, в чем проблема:
select * from `datasetId.INFORMATION_SCHEMA.COLUMNS`
where table_name like 'table%'
limit 100;
В любом случае вы можете использовать функцию unnset для выбора из вашего поля STRUCT, например:
WITH `table` AS (
SELECT (ARRAY<STRUCT<x INT64, y STRING>>[(1, 'foo'), (3, 'bar')]) as arr
)
select x, y from (
select * from `table`, unnest(arr)
)
Комментарии:
1. Привет, Тамир Кляйн, большое вам спасибо за ваш ответ. На самом деле я уже знаю, где проблема. моя проблема возникла из-за того, что в моем приложении сегодня нет события в этом поле, но мне нужно знать, как запустить SQL, чтобы игнорировать этот случай. Потому что мне нужно отслеживать событие каждые 1 час в моем расписании.
2. Вы пытались использовать
unnest
, как описано в этой ссылке: cloud.google.com/bigquery/docs/reference/standard-sql /…3. Спасибо, Тамир Кляйн, я попробую ваш совет.
4. Конечно, я обновляю свой ответ, чтобы помочь вам еще немного. Пожалуйста, подумайте о принятии ответа и голосовании, если это было вам полезно, посмотрите, как в этой ссылке: meta.stackexchange.com/questions/5234 /…
5. Извините, это не работает, я пытаюсь выполнить запрос для получения этого столбца (jsonpayload.context.input.step), но события в этом разделе не происходит, что означает, что в этом разделе нет этого столбца, но я пытаюсь выбрать все (из
table_2019*
), но в этом разделе ошибка. Если отправить мне null, это нормально, но отправьте мне сообщение об ошибке.