Json Firebase数据到Google BigQuery
Firebase提供。其中一个特色用例是“摄入分析产品”: 我在Firebase中有很多数据(导出到云存储桶时超过1GB),如Firebase产品中所述,我想将这些数据放入大查询中 但是,真的有可能编写一个适合Firebase原始数据的表模式吗? 让我们以Firebase文档中的数据库为例。 JSON如下所示:Json Firebase数据到Google BigQuery,json,firebase,google-bigquery,Json,Firebase,Google Bigquery,Firebase提供。其中一个特色用例是“摄入分析产品”: 我在Firebase中有很多数据(导出到云存储桶时超过1GB),如Firebase产品中所述,我想将这些数据放入大查询中 但是,真的有可能编写一个适合Firebase原始数据的表模式吗? 让我们以Firebase文档中的数据库为例。 JSON如下所示: { “恐龙”:{ “bruhathkayosaurus”:{ “出现”:-7000000, “高度”:25 }, “兰博龙”:{ “出现”:-76000000, “高度”:2.1 } }
{
“恐龙”:{
“bruhathkayosaurus”:{
“出现”:-7000000,
“高度”:25
},
“兰博龙”:{
“出现”:-76000000,
“高度”:2.1
}
},
“分数”:{
“bruhathkayosaurus”:55岁,
“兰博龙”:21
}
}
要列出所有恐龙,我想唯一的方法是在bigQuery模式中使用记录字段。但BigQuery中的记录通常对应于导入的JSON中的数组。Firebase中没有数组,只有一个以恐龙名字作为关键名字的对象
这样的BigQuery表模式不起作用:
是否可以编写适合Firebase原始数据的表架构?或者我们应该先准备数据,使其与BigQuery兼容吗?因为上面的数据只是JSON,您应该能够让它与Firebase一起工作。但是,我认为备份后准备数据要容易得多 您提到Firebase数据中没有数组 尽管它可能看起来像Firebase数据库中的对象,但在查询时它将作为数组返回
因此,在Firebase数据库中创建模式是可行的,但这可能会给应用程序带来大量开销。事实上,大查询只支持换行符分隔的JSON或JSONL: JSON行是一种方便的存储结构化数据的格式,可以 一次只能处理一条记录 要准备在大查询中导入Firebase数据,我们只需要:
在写这篇2017年3月的文章时,我可以确认Firebase实时数据库和BigQuery之间没有真正的集成。只有Firebase分析可以轻松导入BigQuery。所有这些在Firebase上也没有清楚的解释
我们最终编写了自己的解决方案,但您可以查看这个有400多个星星的解决方案,所以我假设有一些人认为它很有用…谢谢。我知道Firebase支持阵列。我只是指恐龙事实数据库中的数据。我在Firebase中存储了许多用户配置文件,而不是恐龙。根据Firebase博客文章中的描述,我认为升级到篝火计划后,使用BigQuery进行一些统计将非常容易。但事实上,准备数据需要做很多工作。啊,我明白了,谢谢你澄清!只是想确保你知道它将如何出口。让我知道你最终会做什么,或者如果你有任何其他问题:)你可以做的一件事,就是在数据输入Firebase时将数据发送到BigQuery。这需要运行支持Firebase SDK的服务器,如Node.js或JVM客户端。您应该能够使用Java在AppEngine上运行BigQuery和Firebase SDK。服务器只需侦听更新并将其发送到BigQuery。从现在开始,我想我会简单地要求退还篝火计划的费用。应该更好地解释一下,将Firebase数据放入BigQuery并非易事。创建脚本将数据导入BigQuery应该不会太困难。你看到的问题是什么?
[
{
"name": "dinosaurs",
"type": "RECORD",
"mode": "REQUIRED",
"fields": [
{
"name": "dinosaur",
"type": "RECORD",
"mode": "REPEATED",
"fields": [
{
"name": "appeared",
"type": "INTEGER"
},
{
"name": "height",
"type": "INTEGER"
},
{
"name": "length",
"type": "INTEGER"
},
{
"name": "order",
"type": "STRING"
},
{
"name": "vanished",
"type": "INTEGER"
},
{
"name": "weight",
"type": "INTEGER"
}
]
},
{
"name": "scores",
"type": "RECORD",
"mode": "REPEATED",
"fields": [
{
"name": "dinosaur",
"type": "INTEGER"
}
]
}
]
}
]
// we send this
['a', 'b', 'c', 'd', 'e']
// Firebase stores this
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}
// since the keys are numeric and sequential,
// if we query the data, we get this
['a', 'b', 'c', 'd', 'e']
var dataForBigQuery = '';
for (var i in dinosaurs) {
dataForBigQuery+= JSON.stringify(dinosaurs[i]) + '\n';
}