Облачная функция GCP для записи данных в BigQuery выполняется успешно, но данные не отображаются в таблице BigQuery - PullRequest
0 голосов
/ 25 марта 2020

Я использую следующую облачную функцию. Он работает с успехом и указывает, что данные были загружены в таблицу. Но когда я запрашиваю BigQuery, никакие данные не были добавлены. Я не получаю никаких ошибок и никаких признаков того, что это не работает.

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.")

Пока предпринято попыток;

  1. Проверьте, что данные извлекались -> PASSED, я распечатал row_list и данные есть
  2. Запуск локально с моей машины -> PASSED, данные появились, когда я запустил его с терминала python
  3. Распечатайте данные таблицы -> PASSED, см. прикрепленный скриншот все появляется в журналах
  4. Подтвердите, что он может найти таблицу -> PASSED, я изменил имя таблицы на несуществующее, и оно не удалось

Не уверен, что дальше, любой совет будет принята с благодарностью

logfile indicating success

1 Ответ

0 голосов
/ 25 марта 2020

Предполагая, что учетной записи службы по умолчанию для App Engine назначена роль редактора по умолчанию, и что у вас есть очень простая схема для таблицы BigQuery. Например:

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

Следующая модификация вашего кода должна работать для функции, запускаемой по HTTP. Обратите внимание, что вы не включили Row_list.append(my_list) в for для l oop, чтобы заполнить ваш список элементами, и что согласно образцам в документации вы должны использовать список кортежей:

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.")

С очень простым файлом require.txt:

# Function dependencies, for example:
# package>=version
pandas
google-cloud-bigquery
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...