【问题标题】:Issue exporting large json data from firebase with Curl使用 Curl 从 Firebase 导出大型 json 数据的问题
【发布时间】:2018-08-07 19:31:54
【问题描述】:

我需要从 Firebase 数据库中的一个节点导出所有数据,但是该文件似乎太大而无法通过 Firebase 控制台中的“导出”选项下载。 因此,我尝试通过 Curl 使用 firebase REST api 来下载 json 文件:

curl --globoff -k -o dr.json "https://mydatabase.firebaseio.com/data.json?format=export"

此命令能够执行特定范围的文件大小 (0 - 275Mb) 的下载。不幸的是,不是我要下载的主文件,大约 450 MB。尝试下载时出现此错误。

{ "error" : "Payload is too large"}

我也尝试通过拆分文件并设置下载限制来获取文件,但它仍然给我同样的错误“有效负载太大”

curl --range 0-55555555 --globoff -k -o dr.json "https://mydatabase.firebaseio.com/data.json?format=export"

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您是否尝试过使用 Firebase CLI? firebase.googleblog.com/2017/12/…
  • @DougStevenson 我只是尝试了一下,但仍然遇到同样的错误:Error: HTTP Error: 413, Payload is too large 我已经找到了 JSON 的 HTTP 状态和错误代码 (cloud.google.com/storage/docs/json_api/v1/…) 上的错误,并且它建议我改用“重写方法”
  • 对我如何为 firebase 导出实施它有任何想法吗?
  • 我也没有成功尝试将数据集复制到 firebase 上的另一个项目。同样的错误..
  • 您链接的错误代码似乎与 Cloud Storage API 有关。这是实时数据库的:firebase.google.com/docs/reference/rest/database/… .. 我认为他们忘记记录您的错误,或者他们可能从未预料到它会发生。

标签: firebase curl firebase-realtime-database


【解决方案1】:

拆分文件的一种简单方法是使用shallow URI 参数。例如,如果您有这样的数据结构:

{
    "data":{
        "users":{
            //...dataset
        },
        "posts":{
            //...dataset
        },
        "comments":{
            //...dataset
        }
    }
}

当你运行 curl --globoff -k -o dr.json "https://mydatabase.firebaseio.com/data.json?shallow=true&format=export" 时,它会返回:

{
    "data":{
        "users":true,
        "posts":true,
        "comments":true
    }
}

然后您可以使用以下方式下载users 节点:

curl --globoff -k -o dr.json "https://mydatabase.firebaseio.com/data/users.json?format=export"

postscomments 节点也是如此。

我希望这些节点不要太大。但如果发生这种情况,您可以再次使用 shallow 参数将它们分成更小的部分:

curl --globoff -k -o dr.json "https://mydatabase.firebaseio.com/data/users.json?shallow=true&format=export"

【讨论】:

  • 如果json中只有1个节点(数组)怎么办,例如"data":["obj1","obj2","obj3"...]
  • @Choletski 使用数组索引作为键。无论如何,Firebase 都会这样对待它们。确保你知道你的索引是从 0 开始还是从 1 开始,因为如果你存储了一个基于 1 的数组,0 索引会给你 null。
  • “浅”参数适用于我们中的一些人。让我们的代码获取 JSON 树顶层的密钥,而无需下载整个内容。然后我们可以分别备份每个密钥。
【解决方案2】:

我也遇到了这个问题,并通过使用 Postman 的 导入 功能解决了这个问题,因为下载大型 JSON 文件有时会在中途遇到失败。你可以把传统的cUrl命令放在上面。您只需在收到回复后点击保存回复。 Postman 有时还需要预览 JSON,甚至冻结 UI,但您不必为此烦恼。

【讨论】:

    【解决方案3】:

    对于任何寻找替代解决方案的人,您可以使用shallow 功能,如here 所述:

    这是一项高级功能,旨在帮助您处理大型数据集,而无需下载所有内容。要使用它,请添加 shallow=true 作为参数。这将限制返回数据的深度。如果该位置的数据是 JSON 原语(字符串、数字或布尔值),则将简单地返回其值。如果该位置的数据快照是 JSON 对象,则每个键的值将被截断为 true。

    例如:https://mydatabase.firebaseio.com/.json?shallow=true&format=export

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2022-09-23
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多