【问题标题】:Export GCP Datastore and import to a different GCP Project导出 GCP 数据存储区并导入到不同的 GCP 项目
【发布时间】:2020-03-06 20:58:13
【问题描述】:

我正在尝试将数据从一个 GCP 项目中的 DataStore 复制到另一个 - 该过程似乎没有给出任何错误,但也没有填充我的目标数据存储。

在我的源项目中,我创建了一个存储桶并将我的数据存储区导出到其中,如下所示:

gcloud datastore export gs://ctb_datatransfer

然后我切换到我的目标项目并运行

gcloud datastore import gs://ctb_datatransfer/2020-03-01T18:41:37_32872/2020-03-01T18:41:37_32872.overall_export_metadata

这些步骤似乎都没有显示任何错误,但导入完成后我的目标数据存储仍然为空。

感谢您提供任何帮助,因为我对正在发生的事情并没有太多的线索 - 我相信我已经授予了存储桶的正确权限(如果我没有,我希望看到某种权限失败不是我猜)

导出步骤的输出如下所示

    done: true
metadata:
  "@type": type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata
  common:
    endTime: "2020-03-01T18:41:50.349159Z"
    operationType: EXPORT_ENTITIES
    startTime: "2020-03-01T18:41:37.188012Z"
    state: SUCCESSFUL
  entityFilter: {}
  outputUrlPrefix: gs://ctb_datatransfer/2020-03-01T18:41:37_32872
  progressBytes:
    workCompleted: "8848"
    workEstimated: "6480"
  progressEntities:
    workCompleted: "40"
    workEstimated: "40"
name: projects/chattyappsdata-staging/operations/ASAzMTEwMzAzMTMJGnRsdWFmZWQHEjJ3LXVlLXNib2otbmltZGEQCigS
response:
  "@type": type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse

而导入步骤的输出看起来像这样

    done: true
metadata:
  "@type": type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata
  common:
    endTime: "2020-03-01T18:46:25.251008Z"
    operationType: IMPORT_ENTITIES
    startTime: "2020-03-01T18:45:44.029056Z"
    state: SUCCESSFUL
  entityFilter: {}
  inputUrl: gs://ctb_datatransfer/2020-03-01T18:41:37_32872/2020-03-01T18:41:37_32872.overall_export_metadata
  progressBytes:
    workCompleted: "8110"
    workEstimated: "8848"
  progressEntities:
    workCompleted: "40"
    workEstimated: "40"
name: projects/chattytoolbox/operations/AiAwNTEwNDAxMTMJGnRsdWFmZWQHEjJ3LXVlLXNib2otbmltZGEQCigS
response:
  "@type": type.googleapis.com/google.protobuf.Empty

【问题讨论】:

  • 如何测试空数据存储?您是否在云控制台中查找 chattytoolbox?
  • @JimMorrison - 是的 - 只是刷新控制台页面,它告诉数据库是空的
  • @JimMorrison - 实际上 - 而且很奇怪 - 我现在刚刚检查过它(在 24 小时左右没有做任何事情之后),实体现在已经出现在目标数据存储中。
  • @DaveH 问题现在解决了吗?
  • @Ajordat - 好吧,数据现在存在于目标数据源中,但它似乎没有我做任何事情就出现了。我不知道这是否只是 GCP 数据存储控制台的人工制品,但似乎在我执行 imprt 后控制台立​​即告诉我数据库是空的,然后当我几个小时后再次检查时,数据有出现了。我不明白为什么或如何发生这种情况。

标签: google-cloud-platform google-cloud-datastore


【解决方案1】:

正如 OP 在 cmets 中所说,整个过程最终成功了,它只是在几个小时后才完成。这是一个可能的解释:

查看有关导入实体的文档,我发现导入是 long running operation (LRO),因此可能需要很长时间才能完成。从您分享的导入输出中,我们可以看到操作did finish,但我认为它缺少一些传播,已被时间修复。

此外,导入命令 (gcloud datastore import) 只是启动 LRO。如果您指定参数--async,该命令将立即返回,但如果您不指定,它将等待响应。在this section,在 gcloud 选项卡上,声明即使导入命令被取消,操作仍将继续,从而强化了关于命令独立性、导入和传播的理论。

【讨论】:

  • 我遇到了同样的问题,来到了这篇文章。我知道这是一个长时间运行的操作 (LRO),需要一些时间,但在我的情况下,当我运行命令“gcloud datastore operations describe ******”时,一段时间后它显示“状态成功”。此时我希望数据会显示在数据存储视图中,但它仍然显示数据存储为空。在流程结束后需要一些时间来显示数据是否合适?这似乎有点奇怪的行为。
  • 只是一个更新,虽然它仍未显示在数据存储视图中,但我创建了一个虚拟实体“测试”。这显示了“QUERY BY KIND”视图,其中仅列出了“测试”实体。在这里,我手动输入了我恢复的实体之一,然后神奇地显示了数据! UI 似乎与存在的实际数据不同步。单击“刷新”时,这不是更正的事件。我想这是数据存储的古怪之处之一?不喜欢。
猜你喜欢
  • 2022-08-12
  • 2021-11-08
  • 1970-01-01
  • 2021-06-27
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 2020-10-21
相关资源
最近更新 更多