首页 > 解决方案 > 在管道中将数据写入 Google Firestore

问题描述

我想通过带有 Apache Beam 的 Dataflow 运行器将数据从 Cloud BigQuery 读取到 Cloud Datastore。从文档来看,Firestore 尚不受支持。我编写自己的课程来做到这一点。

class UpdateIntoFireStore(beam.DoFn):

    def process(self, element):
        try:
            cred = credentials.Certificate({
              "..."
            })

            firebase_admin.initialize_app(cred, {
            'projectId': '...',
            })
        except ValueError:
            pass
        db = firestore.client()
        doc_ref = db.collection(u'poi')
        doc_ref.add(element)

管道如下:

job = ( p  | 'Read from BigQuery' >> Read(BigQuerySource(query="SELECT * FROM ...", use_standard_sql=True))
           | 'Update to Firestore' >> beam.ParDo(UpdateIntoFireStore()))

这种方法好吗?我担心并行处理对 Cloud Firestore 上的这些写入操作的影响。

标签: google-cloud-firestoreapache-beam

解决方案


这就像从数据流中进行外部调用一样。从技术上讲,这将起作用。但是,有几件事需要注意。

  1. 无法保证单个元素将被处理多少次,因此您可能会在 firestore 中获得同一元素的多个条目。
  2. 您将对 Firestore 的每个元素进行单独调用,并且没有缓存 Firestore 客户端/连接。

推荐阅读