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 ;

  • Vérifier que les données étaient extraites -> PASSED, j'ai imprimé row_list et les données sont là

  • Exécuter localement à partir de ma machine -> PASSED, les données sont apparues lorsque je les ai exécutées à partir d'un terminal python

  • Imprimez les détails de la table -> PASSED, voir la capture d'écran ci-jointe, tout apparaît dans les journaux

  • Confirmez qu'il est capable de trouver la table -> PASSED, j'ai changé le nom de la table en un nom qui n'existait pas et cela a échoué

  • Je ne sais pas quelle est la prochaine étape, tout conseil serait grandement apprécié

    fichier journal indiquant le succès


    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

    Posts les plus consultés de ce blog

    Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

    Détecter les appuis sur les touches fléchées en JavaScript

    Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"