Я пытаюсь получить таблицу из BQ, преобразовать ее в df, применить к ней изменения, а затем загрузить ее обратно в BQ, заменив прежнюю версию.
Эта функция предназначена для работы в качестве облачной функции Google.
Учетная запись службы, которую использует GCS, обладает всеми правами доступа, необходимыми для доступа к BQ.
Я использовал это до сих пор, но он не работает:
ВЫДЕРЖКА СТОЛ DFP ИЗ БК
import google.cloud.bigquery as bigquery
import pandas_gbq as pd
def execute_function(request):
#Defines Client access & Project to be accessed
client = bigquery.Client()
SQL = """
SELECT LINE_ITEM_NAME, TOTAL_LINE_ITEM_LEVEL_CLICKS
FROM `DATASET.table_imported`
WHERE DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
AND LINE_ITEM_TYPE = 'PRICE_PRIORITY'
ORDER BY TOTAL_LINE_ITEM_LEVEL_CLICKS DESC
LIMIT 1000"""
query_job = client.query(SQL)
dfp = query_job.result()
### CREATE WRONG NAMING TABLE SORTED BY CLICKS DESCENDING
dfp = dfp.to_dataframe()
dfp.columns = ['li_name', 'clicks_number']
dfp.set_index('li_name', drop = False, inplace = True)
wrong_naming = pd.DataFrame()
li_names = []
clicks_numbers = []
#Adds line items that have names with number of fields not equal to 7 only if not already present
for row in range(len(dfp)):
if len(dfp.iloc[row, 0].split('_')) != 7 and dfp.iloc[row, 0] not in li_names:
li_names.append(dfp.iloc[row, 0])
clicks_numbers.append(dfp.iloc[row, 1])
#Adds created lists to wrong_naming dataframe
wrong_naming['li_name'] = li_names
wrong_naming['clicks_number'] = clicks_numbers
### EXPORT / SAVE TABLE TO GBQ
wrong_naming.to_gbq('DATA_LAKE_MODELING_US.wrong_naming',
if_exists='replace')
Но хотя он работал, когда я запускал код в локальной системе, в облаке это не так.
Вот сообщение об ошибке, которое я получаю: «Ошибка: не удалось обработать запрос»
Есть идеи, как мне это решить?