三行代码  ›  专栏  ›  技术社区  ›  secret

将数据从Firestore导出到GCS

  •  0
  • secret  · 技术社区  · 2 月前

    我试图使用这个代码片段将数据从firestore导出到google云存储

    const functions = require('firebase-functions');
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    
    const bucket = 'gs://BUCKET_NAME';
    
    exports.scheduledFirestoreExport = functions.pubsub.schedule('every 24 hours').onRun(async() => {
    
      const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT;
      const databaseName = client.databasePath(projectId, '(default)');
    
      const response = await client.exportDocuments({
            name: databaseName,
            outputUriPrefix: bucket,
            collectionIds: [],
          });
     console.log(`Backup Successful :${response}`, {response});
    //here I am trying to import the data to bigquery
    });
    

    我面临的问题是client.exportDocuments在Google云存储桶中创建文件之前几毫秒就完成了。所以,当我试图访问它进行导入时,它说不存在这样的文件。URL是错误的。

    有什么建议吗?

    1 回复  |  直到 2 月前
        1
  •  0
  •   DazWilkin    2 月前

    下面是基本方法 databases.export documents .

    response 是一个 Operation 这在GCP上可能是一个长期运行的进程。

    在作业成功或失败之前,您需要轮询(我认为没有办法订阅)操作端点。

    如果完成,您就可以开始BigQuery作业。

    见: Managing Export and Import operations

    但是,这可能会超过云函数的超时时间,并且可能不应该在单个函数调用期间尝试。

    您可能需要考虑创建另一个在导出完成后触发的进程。我没有这样做。您可以创建由GCS事件触发的后台功能。我不知道。