我试图使用以下代码片段将数据从firestore导出到谷歌云存储
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
});
我面临的问题是客户端.exportDocuments在谷歌云存储桶中创建文件之前几毫秒完成。所以当我试图访问它进行导入时,它说不存在这样的文件。URL错误
对此有什么建议吗?
下面是底层方法数据库。导出文档。
response
是一个操作,它可能是GCP上的一个长时间运行的进程。
您需要轮询(我认为没有办法订阅(Operation端点,直到作业成功或失败。
如果它完成了,那么您就可以开始BigQuery作业了。
参见:管理进出口业务
然而,这可能会超过云函数的超时时间,并且可能不应在单个函数调用期间尝试。
您可能需要考虑创建另一个在导出完成后触发的进程。我没有这么做。您可以创建由GCS事件触发的背景功能。我不知道。