Вставка записей в BQ из Firebase (в основном потоковым) - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно загрузить данные из Firebase в большой запрос, и для этого у меня есть этот код, но при загрузке после успешного извлечения и сглаживания необходимых данных из Firebase выдает ошибки.Вот выдержка из кода:

import json
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from google.cloud import bigquery
from google.cloud import storage
import os
from google.oauth2 import service_account

ref=db.reference('patients')
snapshot = ref.order_by_key().get()
for key, val in snapshot.items():

    snapshot[key]["keyid"]=key
    kw=val
    dictfilt = lambda x, y: dict([ (i,x[i]) for i in x if i in set(y) ])
    wanted_keys = ("sex","email","keyid","customer_id","created_at")
    result = dictfilt(kw, wanted_keys)
    serialized= json.dumps(result, sort_keys=True)
    '''#JSON file creation    #I should not go for this step I think!
    # [SAVE THE OUTPUT IN A TEXT FILE]
    f = open('bqData111.json','a')
    f.write(serialized+'\n')            
    f.close()'''
---------------------------------------------------------------------------
##Successfully got the required data in json(newline delimeted) that BQ requires.
----------------------------------------------------------------------------
    ##Streaming into bigquery
    client = bigquery.Client()
    dataset_id = 'Data_set'  
    # For this sample, the table must already exist and have a defined schema
    table_id = 'firebase_data'  # replace with your table ID
    table_ref = client.dataset(dataset_id).table(table_id)
    table = client.get_table(table_ref)  # API request
    rows_to_insert = {serialized}# <---------->I have doubt here

    #for i in rows_to_insert.items():
    errors = client.insert_rows(table, rows_to_insert)  # API request
    assert errors == []

До получения данных из Firebase все в порядке.Но потоковая часть становится сложной для меня.Необходимые данные в формате json хранятся в сериализованном виде.И в строке, где я назначил сериализованный для row_to_insert, я думаю, что я получаю проблемы.Как решить эту проблему?Есть идеи и информация?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...