Ошибка библиотеки Google Cloud Bigquery

Я получаю эту ошибку Cannot set destination table in jobs with DDL statements

Когда я пытаюсь повторно отправить задание из функции job.build_resource() в библиотеке google.cloud.bigquery.

Кажется, что таблица назначения устанавливается примерно так после этого вызова функции.

'destinationTable': {'projectId': 'xxx', 'datasetId': 'xxx', 'tableId': 'xxx'},

Я делаю что-то не так здесь? Спасибо всем, кто может дать мне какие-либо рекомендации здесь.

РЕДАКТИРОВАТЬ:

Задание изначально запускается этим

query = bq.query(sql_rendered)

Мы сохраняем идентификатор задания и используем его позже для проверки статуса.

Мы получаем работу, как это

job = bq.get_job(job_id=job_id)

Если он соответствует условию, в этом случае он не работает из-за ограничения скорости. Повторяем работу.

Мы повторяем работу, как это

di = job._build_resource()
jo = bigquery.Client(project=self.project_client).job_from_resource(di)
jo._begin()

Я думаю, что это почти весь код, который вам нужен, но буду рад предоставить больше, если это необходимо.


person dillon    schedule 28.06.2018    source источник
comment
Пожалуйста, поделитесь кодом, который вы используете. Невозможно сказать, что происходит, чтобы вызвать установку таблицы назначения только из сообщения об ошибке.   -  person Elliott Brossard    schedule 28.06.2018
comment
Есть ли причина, по которой вы не отправляете исходную работу повторно? Довольно странно отправлять результат, возвращаемый bq.get_job, поскольку он содержит несвязанные атрибуты, такие как статистика запросов и т. д. (и в данном случае целевую таблицу).   -  person Elliott Brossard    schedule 29.06.2018
comment
Причина в том, что мы используем Airflow. Итак, он проходит через xcoms, поэтому мы сохраняем job_id, получаем его и затем используем. Должны ли мы изменить этот рабочий процесс?   -  person dillon    schedule 29.06.2018
comment
(Простой) альтернативой было бы разделение ресурса задания, которое вы возвращаете, только до соответствующих полей, но лучшим долгосрочным решением может быть распространение исходного задания или запроса, который вы хотите запустить. Однако трудно сказать, что более разумно, учитывая ваши текущие настройки.   -  person Elliott Brossard    schedule 29.06.2018


Ответы (1)


Вы видите эту ошибку, потому что в вашем запросе есть оператор DDL. Происходит то, что job_config изменяет некоторые значения после выполнения первого запроса, особенно job_config.destination . Чтобы решить эту проблему, вы можете попытаться сбросить значение job_config.destination на None после каждой отправки задания или использовать разные job_config для каждого запроса.

person Philipp Sh    schedule 12.07.2018