La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery
J'exécute la fonction cloud suivante. Il s'exécute avec succès et indique que les données ont été chargées dans la table. Mais lorsque j'interroge BigQuery, aucune donnée n'a été ajoutée. Je ne reçois aucune erreur et aucune indication que cela ne fonctionne pas.
from google.cloud import bigquery
import pandas as pd
def download_data(event, context):
df = pd.read_csv('https://covid.ourworldindata.org/data/ecdc/full_data.csv')
# Create an empty list
Row_list =[]
# Iterate over each row
for index, rows in df.iterrows():
# Create list for the current row
my_list =[rows.date, rows.location, rows.new_cases, rows.new_deaths, rows.total_cases, rows.total_deaths]
#print(my_list)
# append the list to the final list
Row_list.append(my_list)
## Get Biq Query Set up
client = bigquery.Client()
table_id = "<project_name>.raw.daily_load"
table = client.get_table(table_id)
print(client)
print(table_id)
print(table)
errors = client.insert_rows(table, Row_list) # Make an API request.
if errors == []:
print("New rows have been added.")
Tentative jusqu'à présent ;
Je ne sais pas quelle est la prochaine étape, tout conseil serait grandement apprécié
Solution du problème
Supposons que le compte de service par défaut d'App Engine dispose du rôle d'éditeur par défaut et que vous disposiez d'un schéma très simple pour la table BigQuery. Par example:
Field name Type Mode Policy tags Description
date STRING NULLABLE
location STRING NULLABLE
new_cases INTEGER NULLABLE
new_deaths INTEGER NULLABLE
total_cases INTEGER NULLABLE
total_deaths INTEGER NULLABLE
La modification suivante de votre code devrait fonctionner pour une fonction déclenchée par HTTP. Notez que vous n'incluez pas le Row_list.append(my_list)
dans la boucle for pour remplir votre liste avec les éléments et que, selon les exemples de la documentation, vous devriez utiliser une liste de tuples :
from google.cloud import bigquery
import pandas as pd
client = bigquery.Client()
table_id = "[PROJECT-ID].[DATASET].[TABLE]"
def download_data(request):
df = pd.read_csv('https://covid.ourworldindata.org/data/ecdc/full_data.csv')
# Create an empty list
Row_list =[]
# Iterate over each row
for index, rows in df.iterrows():
# Create list for the current row
my_list =(rows.date, rows.location, rows.new_cases, rows.new_deaths, rows.total_cases, rows.total_deaths)
# append the list to the final list
Row_list.append(my_list)
## Get Biq Query Set up
table = client.get_table(table_id)
errors = client.insert_rows(table, Row_list) # Make an API request.
if errors == []:
print("New rows have been added.")
Avec le fichier requirements.txt très simple :
# Function dependencies, for example:
# package>=version
pandas
google-cloud-bigquery
Commentaires
Enregistrer un commentaire