导出和导入模拟器数据

借助 Datastore 模拟器的导入和导出功能,您可以从数据库实例导出数据并将其加载到模拟器中。您还可以从模拟器导出数据,并将其加载到 Datastore 模式数据库中。

准备工作

在使用 Datastore 模拟器的导入或导出功能之前,请先完成以下事项:

将实体导入模拟器

借助模拟器的导入功能,您可以将一组实体导出文件中的实体加载到模拟器中。实体导出文件可在从 Datastore 模式数据库或模拟器实例中导出数据时加以创建。

要将实体导入模拟器,请向模拟器发送 POST 导入请求。您可以使用 curl 或类似工具。例如,以下请求会将一组实体导出文件中的所有实体导入模拟器中:

协议

curl -X POST localhost:8081/v1/projects/[PROJECT_ID]:import \
-H 'Content-Type: application/json' \
-d '{"input_url":"[ENTITY_EXPORT_FILES]"}'
如果模拟器使用其他端口,请修改 localhost:8081

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [ENTITY_EXPORT_FILES] 是实体导出文件中的 overall_export_metadata 文件的路径。例如:

    {"input_url":"/home/user/myexports/2019-02-04T19:39:33_443/2019-02-04T19:39:33_443.overall_export_metadata"}

导入特定种类和命名空间的实体

您可以指定实体过滤条件,以便只导入特定种类或命名空间的实体。只有在导出数据时使用了实体过滤条件,才能在导入时指定实体过滤条件。

在实体过滤条件中指定种类或命名空间:

协议

curl -X POST localhost:8081/v1/projects/[PROJECT_ID]:import \
-H 'Content-Type: application/json' \
-d '{"input_url":"[ENTITY_EXPORT_FILES]",
"entity_filter":{"kinds":[[KIND_NAMES]], "namespace_ids":[[NAMESPACES]]}}'
如果模拟器使用其他端口,请修改 localhost:8081

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [ENTITY_EXPORT_FILES] 是实体导出文件中的 overall_export_metadata 文件的路径。例如:

    {"input_url":"/home/user/myexports/2019-02-04T19:39:33_443/2019-02-04T19:39:33_443.overall_export_metadata"}

  • [KIND_NAMES] 是种类列表:"kinds":["KIND_1", "KIND_2"]

  • [NAMESPACES] 是命名空间 ID 列表:

    "namespace_ids":["NAMESPACE_1", "NAMESPACE_2"]

在模拟器中导出实体

借助模拟器的导出功能,您可以将模拟器中的实体保存到一组实体导出文件中。然后,您可以使用导入操作将实体导出文件中的实体加载到 Datastore 模式数据库或模拟器实例中。

要导出模拟器实例中的实体,请向模拟器发送 POST 导出请求。您可以使用 curl 或类似工具。例如,以下请求将导出模拟器中的所有实体:

协议

curl -X POST localhost:8081/v1/projects/[PROJECT_ID]:export \
-H 'Content-Type: application/json' \
-d '{"output_url_prefix":"EXPORT_DIRECTORY"}'
如果模拟器使用其他端口,请修改 localhost:8081

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [EXPORT_DIRECTORY] 用于指定模拟器保存实体导出文件的目录。此目录不得预先包含一组实体导出文件。例如:

    {"output_url_prefix":"/home/user/myexports/2019-02-04/"}

导出特定种类和命名空间的实体

您可以指定实体过滤条件,以便只导出特定种类或命名空间的实体。

在实体过滤条件中指定种类或命名空间:

协议

curl -X POST localhost:8081/v1/projects/[PROJECT_ID]:export \
-H 'Content-Type: application/json' \
-d '{"output_url_prefix":"EXPORT_DIRECTORY",
"entity_filter":{"kinds":[[KIND_NAMES]], "namespace_ids":[[NAMESPACES]]}}'
如果模拟器使用其他端口,请修改 localhost:8081

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [EXPORT_DIRECTORY] 用于指定模拟器保存实体导出文件的目录。此目录不得预先包含一组实体导出文件。例如:

    {"output_url_prefix":"/home/user/myexports/2019-02-04/"}``

  • [KIND_NAMES] 是种类列表:"kinds":["KIND_1", "KIND_2"]

  • [NAMESPACES] 是命名空间 ID 列表:

    "namespace_ids":["NAMESPACE_1", "NAMESPACE_2"]

将模拟器数据加载到数据库中

模拟器创建的实体导出文件与 Datastore 模式数据库的托管式导入功能兼容。

在向数据库加载从模拟器导出的实体之前,必须将实体导出文件上传到 Cloud Storage 存储分区。托管式导入功能仅从 Cloud Storage 存储分区中读取数据。

在将实体导出文件上传到 Cloud Storage 存储分区后,您可以按照导出和导入实体中的说明将数据导入数据库。