仅从 Firestore 导出原始数据
Posted
技术标签:
【中文标题】仅从 Firestore 导出原始数据【英文标题】:Export only raw data from firestore 【发布时间】:2021-10-12 14:39:17 【问题描述】:我愿意以表格格式将我以前和所有未来的 firestore 文档导出到 Big Query。
示例:如果我在 Firestore 中有一个 User
集合,例如:
"name": "Jon",
"score": 10,
那么 BigQuery 表应该如下所示:
-------------------------------------
| id | name | score |
----------------+----------+---------
| <document_id> | Jon | 10 |
----------------+----------+---------
我尝试过使用
-
Export Collections to BigQuery。这不会以上述格式导出数据;它会跟踪每个插入/更新/删除事件。
在数据集中手动创建表并从 Firestore 导入备份。这确实为我提供了我想要的 BigQuery 表视图,但它不会自动更新(就像扩展程序一样)。
如何实现上述文档的表格格式以及在更新 Firestore 文档时自动更新?我是否必须编写自己的云函数才能将所有数据更新到 BigQuery?
【问题讨论】:
【参考方案1】:“将集合导出到 BigQuery”附带的 schema-views 脚本允许您创建视图,以便按照您的建议以更加表格的形式查询数据。您可以设置它们一次,然后在新数据进入时对它们进行查询。
【讨论】:
非常感谢!我以前尝试过,但不知何故它不起作用。现在它按预期工作。【参考方案2】:将集合导出到 BigQuery。这不会导出 以上格式;它而是跟踪每个插入/更新/删除 事件。
正如 Michael 所解释的,使用“将集合导出到 BigQuery”扩展程序,您可以运行 schema-views
脚本,即 provided with the extension,以根据您所需的数据模型创建视图。
另一种方法是编写一个直接写入 BigQuery 的云函数。以下简单示例展示了计划云函数如何从 users
集合中读取文档并将它们添加到 BigQuery 表中。
您可以自行调整。特别是,如果您想在创建/删除/更新 Firestore 文档时更新 BigQuery 表,则应使用onWrite()
Cloud Function。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const BigQuery = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
exports.exportToBigQuery = functions.pubsub.schedule('every 24 hours').onRun(async (context) =>
try
// get the user docs !! UP TO YOU TO ADAPT THE QUERY !!
const usersQuerySnapshot = await admin.firestore().collection("users").get();
const rows = [];
usersQuerySnapshot.forEach((doc) =>
rows.push( id: doc.id, name: doc.get("name"), score: doc.get("score") )
);
const dataset = bigquery.dataset("dataset-name"); // Use Environment configuration https://firebase.google.com/docs/functions/config-env
const table = dataset.table("table-name");
await table.insert(rows);
return null;
catch (error)
console.log(error);
return null;
);
【讨论】:
感谢您的详细解答。我通过fs-bq-schema-views
创建了模式视图,并通过fs-bq-import-collection
回填了数据。以上是关于仅从 Firestore 导出原始数据的主要内容,如果未能解决你的问题,请参考以下文章
我们会为仅从缓存中读取(Cloud FireStore)支付(成本)吗? [复制]
气流导出模式仅从 PostgreSQL 到 bigquery
仅从 sequelize 原始查询而不是模型实例中获取 dataValues
导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?