BigQuery API поддерживает CTE через Python? - PullRequest
0 голосов
/ 05 июля 2019

Я продолжаю пытаться выполнить запрос из python к bq, но он возвращается ко мне с помощью;400 Syntax error: Unexpected end of statement at [1:3585]

Плохо то, что мне дают номер строки, которую я не могу отследить.

Это единственный запрос, который я вставляю втаблица с использованием CTE.

Insert `x.y.z` (Date, Dollars) WITH data AS (Select Date, Dollars FROM `x.y.temp` SELECT Date, Dollars from data

Запрос отлично работает в BQ UI, но только столкнулся с этой проблемой из API.

1 Ответ

2 голосов
/ 06 июля 2019

CTE определенно поддерживаются при отправке запросов из клиентской библиотеки Python, но возможно, что есть какая-то проблема форматирования от одного из используемых помощников или пользовательского кода.

Сведение наших сообщений о форматировании, вотболее полное руководство по устранению неполадок для всех остальных:

  1. Убедитесь, что флаг UseLegacySql в запросе не установлен, так как WITH / Common Table Expressions (CTE) не поддерживаются вэтот диалект.Кроме того, даже если вы используете префикс запроса #StandardSQL, другой параметр может переопределить это (поведение, когда два несоответствия становятся странными, но не всегда выдают ошибку).

  2. Возвращаемая позиция ошибки - это не просто номер строки, а строка: позиция.Так 1:3585 означает строку 1, символ / позиция 3585.Имейте в виду, что это позиция в запросе, который генерирует библиотека, но может помочь вам отследить проблему.

  3. Посмотрите на фактически генерируемый запрос.Если у вас есть доступ на уровне проекта, вы можете сделать это в пользовательском интерфейсе в разделе «История запросов», а затем выбрать вкладку «История проекта» в верхней части этой страницы.(Если у вас много чего происходит, вам может понадобиться отфильтровать по пользователю или тексту запроса.) Обратите внимание, что вы также можете увидеть, был ли он запущен как устаревший SQL, из деталей запроса.Будьте осторожны, чтобы избежать теста, который вы запустили из пользовательского интерфейса консоли, который также будет отображаться там, но будет отображаться как ваш пользователь (тогда как ваш сценарий, скорее всего, будет отображаться как учетная запись службы или другой аутентифицированный пользователь)

  4. Если у вас нет доступа к запросам проекта, чтобы увидеть ошибку и сгенерированный SQL, вы можете получить текст запроса, получив свойство .query после отправки запроса.На основании документации google-cloud-python это будет выглядеть примерно так: query_job.query.Оттуда, вставив в текстовый редактор, вы сможете увидеть позицию, где генерируется ошибка.Тот факт, что ошибка возникает в строке 1 на 3 КБ в запросе, может указывать на то, что что-то неправильно форматируется.

Желаем удачи в отслеживании этого!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...