Я пытаюсь выполнить запрос клиента bigquery к кадру данных, используя композитор воздушного потока в GCP. Это хорошо работает в локальной системе без воздушного потока.
Даже в воздушном потоке client.query(query)
работает хорошо, но не client.query(query).to_dataframe()
и я не могу понять, почему, если это была проблема с разрешением, то client.query(query)
это тоже не должно было работать.
Я пытался дать все возможные разрешения, и я не думаю, что это проблема с разрешениями.
Ниже код, который работает локально, а не в воздушном потоке в gcp,
from google.cloud import bigquery
client = bigquery.Client(project = "GCP PROJECT NAME")
#get Brand image score for all interview IDs
query = """SELECT * from Table LIMIT 10"""
df_bi=client.query(query).to_dataframe()
print("Success")
Ожидаемые результаты: Успех
Фактический результат
[2023-04-20, 12:47:25 UTC] {taskinstance.py:1853} ERROR - Task failed with exception
Traceback (most recent call last):
File "/opt/python3.8/lib/python3.8/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
return callable_(*args, **kwargs)
File "/opt/python3.8/lib/python3.8/site-packages/grpc/_channel.py", line 946, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/opt/python3.8/lib/python3.8/site-packages/grpc/_channel.py", line 849, in _end_unary_response_blocking
raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.PERMISSION_DENIED
details = "request failed: the user does not have 'bigquery.readsessions.create' permission for 'projects/projectname'"
Не могли бы вы попробовать сначала получить результаты, используя метод result() от клиента, а затем преобразовать его в фрейм данных?
from google.cloud import bigquery
client = bigquery.Client(project = "GCP PROJECT NAME")
query = """
SELECT * from Table LIMIT 10
"""
table = client.query(query).result()
df = table.to_dataframe()
print(df)
Я нашел другую ветку, в которой была та же проблема, в ней было решение, которое вы предоставили, и оно сработало. Отметить это здесь ссылка Спасибо за решение, это работает!