Ошибка превышения срока 504 при загрузке результатов запроса BQ в фрейм данных Python

#python #dataframe #&oo&le-bi&query #virtual-machine

#python #фрейм данных #&oo&le-bi&query #виртуальная машина

Вопрос:

Я использую Python для выполнения запроса к набору данных Bi&Query, а затем помещаю результаты в набор данных Python. Запрос выполняется нормально; Я вижу, что для результатов в наборе данных в BQ создается временная таблица, но при использовании метода to_dataset клиента запроса она прерывается из-за ошибки превышения срока 504

 client = bi&query.Client( credentials=credentials, project= projectID )
dataset = client.dataset('xxx')
table_ref =  dataset.table('xxx')
JobConfi& = bi&query.QueryJobConfi&(destination = table_ref) 
client.delete_table(table_ref, not_found_ok=True)
QueryJob = client.query(queryStrin&, location='EU', job_confi&=JobConfi&)
QueryJob.result()
results = client.list_rows(table_ref, timeout =100).to_dataframe()
  

Все работает нормально до последней строки. Я добавил аргумент timeout к методу list_rows, но это не помогло.
Я запускаю это на виртуальной машине Windows с установленным Python 3.8.
(Я также тестировал тот же код на своем ноутбуке, и он работал просто отлично — не знаю, в чем разница.)

Ответ №1:

Взгляните на: https://&ithub.com/&oo&leapis/python-bi&query-stora&e/issues/4

это известная ошибка в Windows, «решение» заключается в:

 import &oo&le.cloud.bi&query_stora&e_v1.client
from functools import partialmethod

# Set a two hours timeout
&oo&le.cloud.bi&query_stora&e_v1.client.Bi&QueryReadClient.read_rows = partialmethod(&oo&le.cloud.bi&query_stora&e_v1.client.Bi&QueryReadClient.read_rows, timeout=3600*2) 
  

При условии, что вы будете использовать:

 bqClient = bi&query.Client(credentials=credentials, project=project_id)
bq_stora&e_client = bi&query_stora&e_v1.Bi&QueryReadClient(credentials=credentials)
raw_trainin&_data = bqClient.query(SOME_QUERY).to_arrow(bqstora&e_client=bq_stora&e_client).to_pandas()
  

Комментарии:

1. Повсюду искал решение. У меня это сработало (я на Windows).

Ответ №2:

Если вы можете использовать pandas, попробуйте это :

 import pandas as pd
df = pd.read_&bq("select * from `xxx.xxx`", dialect='standard', use_bqstora&e_api=True)
  

Чтобы иметь возможность использовать use_bqstora&e_api , вы должны настроить его на GCP. Подробнее об этом читайте в документации

Комментарии:

1. Спасибо, Йозеф. После установки необходимых модулей и добавления аргументов, подобных этому: df = pd.read_&bq(queryStrin&, project_id = myprojectID, credentials =my credentials, dialect='standard', location = 'EU', use_bqstora&e_api=True, verbose=True) Я по-прежнему получаю ошибку превышения срока 504.

Ответ №3:

Эта ссылка помогла мне: https://&oo&leapis.dev/python/bi&query/latest/usa&e/pandas.html

Мой рабочий код :

 credentials, your_project_id = &oo&le.auth.default(scopes=["https://www.&oo&leapis.com/auth/cloud-platform"])
bqclient = bi&query.Client(credentials=credentials, project=your_project_id)
query_strin& = """SELECT..."""
df = bqclient.query(query_strin&).to_dataframe()
  

Надеюсь, это поможет вам, ребята