#google-cloud-platform #google-cloud-functions
# #google-cloud-platform #google-cloud-функции
Вопрос:
Я создал новую функцию Google на python, которая планирует запрос в BigQuery каждые 10 минут, я тестирую ее, и она работает.
- развертывание работает нормально
- тестирование выдает эту ошибку: Ошибка: превышен лимит памяти. журналы недоступны (но я вижу, что запрос выполнялся так, как ожидалось в BigQuery)
- используя http-триггер в облачном планировщике, я получил сбой с сообщением об ошибке статус: 503, но опять же, я вижу в консоли BigQuery, он работает, как ожидалось
редактировать: здесь код для функции
from google.cloud import bigquery
def load(request):
client = bigquery.Client()
dataset_id = 'yyyyyyyy'
table_id='xxxxxxxxxxx'
job_config = bigquery.QueryJobConfig()
job_config.use_legacy_sql = False
table_ref = client.dataset(dataset_id).table(table_id)
job_config.destination = table_ref
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
sql = """
SELECT * FROM `xxxxxx.datastudio.today_view`;
"""
query_job = client.query(sql,location='asia-northeast1',job_config=job_config)
query_job.result()
print("Job finished.")
Комментарии:
1. Можете ли вы добавить какой-нибудь пример кода этой облачной функции?
2. Я добавил код, пожалуйста, обратите внимание, что код работает
Ответ №1:
Задание BigQuery является асинхронным. Ваша облачная функция запускает его и ожидает завершения. Если функция не работает между ними, это не проблема, 2 службы не связаны.
Если вы делаете это с помощью API, при создании задания (запроса) вы сразу получаете JobID. Затем вам нужно регулярно опрашивать этот идентификатор задания, чтобы узнать его статус. Клиентская библиотека делает то же самое!
Ваша проблема с нехваткой памяти связана с результатом, который ожидает завершения и считывает результаты. Установите размер страницы или max_result, чтобы ограничить возвращаемые данные.
Но вы также можете не ждать окончания и немедленно выйти (пропустить строку query_job.result()
). Вы сэкономите время обработки облачных функций (бесполезное ожидание) и, следовательно, деньги!
Комментарии:
1. Я использую тот же код в другой функции, и он работает просто отлично
2. Я получаю эту ошибку, когда удаляю query_job.result() <!DOCTYPE HTML PUBLIC «-//W3C // DTD HTML 3.2 Final//RU»> <заголовок> 500 Внутренняя ошибка сервера </title> <h1> Внутренняя ошибка сервера </h1> <p> Сервер столкнулсявнутренняя ошибка и не удалось выполнить ваш запрос. Либо сервер перегружен, либо в приложении ошибка.</p>
3. У вас нет возврата. добавьте
return 'job running',200
в конце, чтобы завершить работу корректно. формат:return <response content>, <HTTP code>