【发布时间】:2020-06-18 11:23:58
【问题描述】:
我正在使用 GCP CLI 中的简单节点脚本将 16,000 条记录从 CSV 导入 Firestore。
CSV 有四列区域,每列都写为集合中的一个新文档。我必须异步处理 CSV,因为从 CSV 写入的每一行都链接到前一行中的数据。因此,导入需要 5 个多小时。
该过程不断失败,并出现以下错误: 错误:16 UNAUTHENTICATED:请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据。
我怀疑这是因为这是一个很长的异步任务,因此身份验证令牌即将到期。从我所读到的身份验证令牌的寿命为 1 小时。
我在下面简化了我的代码来模拟 CVS 导入问题。在 Google Cloud Platform 命令行中运行时,这会重现错误。
const {Firestore} = require('@google-cloud/firestore');
const db = new Firestore();
var previous = '';
async function processRecord(record) {
console.log(record);
console.log(record);
let collectionRef = db.collection('groups');
const snapshot = await collectionRef.where('name', '==', 'World').get();
let data = {
name: record,
previous: previous,
created: Firestore.Timestamp.now()
}
let docRef = await db.collection('testing').add(data);
previous = docRef.id;
}
async function importCsv(csvFileName) {
var records = [];
for(var i = 0; i < 16000; i++) {
records.push(`Filler: ${i}`);
}
// const fileContents = await readFile(csvFileName, 'utf8');
// const records = await parse(fileContents, { columns: true });
for (const record of records) {
await processRecord(record);
}
console.log(`Processed ${records.length} records`);
}
importCsv(process.argv[2]).catch(e => console.error(e));
我可以做些什么来完成我的导入?
【问题讨论】:
-
您登录了吗?您可以尝试允许公共访问,这样您就不需要传递令牌。
-
我已登录谷歌云平台。如何允许公共访问?
-
您可以在 Firebase 中启用匿名登录。我只用 firebase 函数完成了这个,所以我不确定它是否适用于你的情况。
标签: node.js firebase google-cloud-platform