Как скачать большое количество документов из Google cloud Firestore? - PullRequest
0 голосов
/ 28 января 2019

У меня есть коллекция data в Google cloud Firestore.В этой коллекции более 200 тыс. Документов.Я хочу экспортировать каждый документ в виде строки в файл.

Я создал скрипт, который работает нормально для строк размером 50К.После этого его сбой со следующим исключением.Как я могу получить все документы?

Я увидел нечто, называемое смещением, но не уверен, что это помогает в моей ситуации.

Фрагмент кода:

from google.cloud import firestore
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "key.json"


db = firestore.Client()
col = db.collection(u'data')
docs = col.get()

with open('data.bak', 'a') as f:
    for doc in docs:
        f.write(u'{} => {}'.format(doc.id, doc.to_dict()))
        f.write('\n')

Исключение:

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "down_db.py", line 13, in <module>
    for doc in docs:
  File "/usr/local/lib/python3.6/dist-packages/google/cloud/firestore_v1beta1/query.py", line 744, in get
    for index, response_pb in enumerate(response_iterator):
  File "/usr/local/lib/python3.6/dist-packages/google/api_core/grpc_helpers.py", line 81, in next
    six.raise_from(exceptions.from_grpc_error(exc), exc)
  File "<string>", line 3, in raise_from
google.api_core.exceptions.ServiceUnavailable: 503 The datastore operation timed out, or the data was temporarily unavailable.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Клиент Python Cloud Firestore имеет 20-секундный тайм-аут для get().Попробуйте разбить работу или попробуйте получить все ссылки на документы и затем выполнить итерации.

docs = [snapshot.reference for snapshot in col.get()]
for doc in docs:
        ...

Github проблема с тайм-аутом

0 голосов
/ 05 февраля 2019

есть другой подход, который, я думаю, будет работать с использованием инструмента командной строки gcloud, для этого потребуется, чтобы вы использовали хранилище Bucket и BigQuery, оба довольно легко освоить.

  1. Экспорт коллекций с использованием функции экспорта gcloud firetore в терминале:
gcloud beta firestore export gs://[BUCKET_NAME] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]

Все ваши коллекции будут экспортированы в корзину GCSформат данных такой же, как и в Cloud Datastore, который можно прочитать через BigQuery, так что ...

Загрузка данных из GCS Bucket в Bigquery , экспортированная коллекция Firestore будет жить как таблица в BigQuery

Запросить форму таблицы BigQuery с помощьючто-то вроде select * from [TABLE_NAME], тогда BigQuery имеет возможность загрузить результат запроса как CSV

0 голосов
/ 28 января 2019

Я создал скрипт, который отлично работает для строк размером 50 КБ.

Это ограничение - ровно число документов, которые вы можете прочитать в проекте на бесплатной платформе / Spark.план Firebase.Если ваш проект работает по бесплатному плану, вам необходимо обновить его, чтобы читать больше документов в день.

...