转到控制台

导出和导入数据

您可以使用 Cloud Firestore 托管式导出和导入服务来恢复意外删除的数据,并导出数据以供离线处理。您可以导出所有文档或仅导出特定的集合。同样,您也可以导入某次导出的所有数据或仅导入特定的集合。从一个 Cloud Firestore 数据库导出的数据可导入到另一个 Cloud Firestore 数据库中。您还可以将 Cloud Firestore 导出文件加载到 BigQuery 中

本文将介绍如何使用托管式导出和导入服务以及 Cloud Storage 来导出和导入 Cloud Firestore 文档。您可以通过 gcloud 命令行工具和 Cloud Firestore API(RESTRPC)使用 Cloud Firestore 托管式导出和导入服务。

准备工作

在使用托管式导出和导入服务之前,您必须完成以下任务:

  1. 为 Google Cloud Platform 项目启用结算功能。 只有启用了结算功能的 Google Cloud Platform (GCP) 项目才能使用导出和导入功能。
  2. Cloud Firestore 数据库位置附近为您的项目创建 Cloud Storage 存储分区。您不能使用“请求者付款”存储分区执行导出和导入操作。
  3. 确保您的帐号拥有 Cloud Firestore 和 Cloud Storage 的必要权限。如果您是项目所有者,则您的帐号拥有所需的权限。 如果不是,以下角色具有必要的导出和导入操作权限以及访问 Cloud Storage 的必要权限:

    • Cloud Firestore 角色OwnerCloud Datastore OwnerCloud Datastore Import Export Admin
    • Cloud Storage 角色OwnerStorage Admin

为您的项目设置 gcloud

设置 gcloud 命令行工具并通过以下方式之一关联到您的项目:

如果尚未安装,请添加包含 Cloud Firestore 导出和导入命令的 gcloud beta 组件:

  gcloud components install beta

导出数据

导出操作会将数据库中的文档复制到 Cloud Storage 存储分区中的一组文件。请注意,所导出的并不是导出开始那一刻截取的数据库快照,导出内容可能包括在操作过程中对数据库所做的变更。

导出所有文档

使用 firestore export 命令可导出数据库中的所有文档,需将 [BUCKET_NAME] 替换为 Cloud Storage 存储分区的名称。添加 --async 标志可阻止 gcloud 工具等待操作完成。

gcloud beta firestore export gs://[BUCKET_NAME]

您可以通过在存储分区名称后添加文件前缀来整理导出的内容,例如 BUCKET_NAME/my-exports-folder/export-name。如果您不提供文件前缀,托管式导出服务会根据当前时间戳创建一个。

导出操作一旦启动就无法通过关闭终端来取消,具体请参阅取消操作

导出特定集合

要导出特定集合,请使用 --collection-ids 标志:

gcloud beta firestore export gs://[BUCKET_NAME] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]

导入数据

文件导出到 Cloud Storage 中后,您可以将这些文件中的文档重新导入原项目或其他项目。请注意关于导入操作的以下几点事项:

  • 在您导入数据时,系统将使用数据库当前的索引定义来更新所需的索引。导出的数据不包含索引定义。

  • 导入操作不分配新的文档 ID,而是使用导出时捕获的 ID。在导入文档时,系统会保留其 ID 以防止 ID 冲突。如果已存在具有相同 ID 的文档,则导入操作将覆盖现有文档。

  • 如果数据库中某个文档未受到导入的影响,导入后该文档将保留在您的数据库中。

导入某次导出的所有文档

使用 firestore import 命令可导入先前的某次导出操作导出的文档。

gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/

其中的 [BUCKET_NAME][EXPORT_PREFIX] 应指向导出文件的位置。例如:

gcloud beta firestore import gs://exports-bucket/2017-05-25T23:54:39_76544/

您可以在 Google Cloud Platform Console 的 Cloud Storage 浏览器中确认导出文件的位置:

打开 Cloud Storage 浏览器

导入操作一旦启动就无法通过关闭终端来取消,具体请参阅取消操作

导入特定集合

要从一组导出文件导入特定的集合,请使用 --collection-ids 标志。要导入特定集合,您只能从仅包含相应集合的导出文件来导入,而无法从包含所有文档的导出文件导入。

gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]

管理导出和导入操作

在您启动导出或导入操作后,Cloud Firestore 会为操作分配唯一的名称。您可以使用操作名称来删除、取消操作或检查操作状态。

操作名称以 projects/[PROJECT_ID]/databases/(default)/operations/ 为前缀,例如:

projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

不过,在为 describecanceldelete 命令指定操作名称时,您可以省略前缀。

列出所有导出和导入操作

使用 operations list 命令可查看所有运行中和最近完成的导出与导入操作:

gcloud beta firestore operations list

查看操作状态

使用 operations describe 命令可显示导出或导入操作的状态。

gcloud beta firestore operations describe [OPERATION_NAME]

预估完成时间

用于获取运行时间较长的操作状态的请求会返回 workEstimatedworkCompleted 指标。返回的这两个指标均包含字节数和实体数。

  • workEstimated 指出操作将处理的预估总字节数和总文档数。

  • workCompleted 指出到目前为止处理的字节数和文档数。操作完成后,此值会指出实际处理的总字节数和总文档数(可能大于 workEstimated 的值)。

workCompleted 除以 workEstimated 即可粗略估算进度。该估算值可能不准确,因为它所依据的是存在延迟的统计信息收集操作。

取消操作

使用 operations cancel 命令可停止进行中的操作:

gcloud beta firestore operations cancel [OPERATION_NAME]

取消正在进行的操作并不会消除操作已经产生的影响。取消的导出操作会在 Cloud Storage 中留下已导出的文档,而取消的导入操作会留下已对数据库进行的更新。您无法导入部分完成的导出文件。

删除操作

使用 operations delete 命令可移除 operations list 输出中的某项操作。此命令不会删除从 Cloud Storage 导出的文件。

gcloud beta firestore operations delete [OPERATION_NAME]

导出和导入操作的计费与价格

在使用托管式导出和导入服务前,您需要为 Google Cloud Platform 项目启用结算功能。导出和导入操作按 Cloud Firestore 价格中列出的费率,收取文档读取和写入的费用。

导出和导入操作的费用不计入您的支出限额。导出或导入操作在完成之前不会触发您的 Google Cloud Platform 预算提醒。同样,在导出或导入操作期间执行的读写会在操作完成后计入您的每日配额

导出到 BigQuery

您可以将数据从 Cloud Firestore 导出文件加载到 BigQuery 中,但前提是您指定了 collection-ids 过滤条件。请参阅从 Cloud Firestore 导出文件中加载数据