使用命令将数据库(具有嵌套文档)从Cloud Firestore导出到Bigquery

时间:2019-04-23 07:18:14

标签: google-bigquery google-cloud-firestore

我正在尝试将云Firestore数据导出到bigquery中以执行sql操作。

  1. [使用]将云Firestore导出到云存储(https://cloud.google.com/firestore/docs/manage-data/export-import gcloud beta firestore导出gs:// htna-3695c-storage --collection-ids ='users','feeds'
  2. 遵循https://cloud.google.com/bigquery/docs/loading-data-cloud-firestoreto从bigquery导入。

我们有2个集合:Cloud Firestore中的“用户和提要”。 我已经成功导出了提要集合,但是无法导出用户集合。 从存储导入数据到bigquery时出现错误

  

错误:意外的属性名称“联系人”。我们在集合用户中有联系人字段。   此联系人字段的类型为“地图”。

我也尝试了命令行。下面是导出bigquery的命令。

**bq --location=US load --source_format=DATASTORE_BACKUP myproject_Dataset.users gs://myproject-storage/2019-04-19T13:29:28_75338/all_namespaces/kind_users/all_namespaces_kind_users.export_metadata**

在这里我也遇到同样的错误:

  

“意外的属性名称”联系人”。

我想添加投影字段以仅导出指定的字段,如下所示 **bq --location=US load --projection_fields=[Coins,Referral,Profile] --source_format=DATASTORE_BACKUP myproject_Dataset.users gs://myproject-storage/2019-04-19T13:29:28_75338/all_namespaces/kind_users/all_namespaces_kind_users.export_metadata**

在这里我也得到了错误:

  

正在等待> bqjob_r73b7ddbc9398b737_0000016a4909dd27_1 ...(0s)当前状态:完成
  加载操作中的BigQuery错误:处理作业'myproject:bqjob_r73b7ddbc9398b737_0000016a4909dd27_1'时出错:内部错误   发生,请求无法完成。错误:4557051

有人可以让我知道如何解决这些问题吗?

提前谢谢您。Image of firestore Db

1 个答案:

答案 0 :(得分:0)

您的某些文档似乎有问题。根据Firestore数据的BigQuery导入的limitations,您必须有一个包含少于10,000个唯一字段名称的架构。在“联系人”架构中,您将联系人的姓名用作键,这种设计可能会产生大量的字段名。您需要检查其他文件是否正在发生这种情况。

作为解决方法,您可以从以下位置更改设计(在加载过程的某个阶段):

"Contacts" : {
    "contact1" : "XXXXX",
    "contact2" : "YYYYY",
}

收件人:

"Contacts" : [
    {
        "name" : "contact1",
        "number" : "XXXXX"
     },
     {
        "name" : "contact2",
        "number" : "YYYYY"
     },
]

此架构将大大减少field_name的数量,这将使其更易于从BigQuery中进行操作。