您可以使用 Cloud Firestore 代管的匯出和匯入服務來復原意外刪除的資料,也能匯出資料,在離線時處理。你可以匯出所有文件,或只匯出特定集合群組。 同樣地,你也能匯入某個匯出項目中的所有資料,或只匯入特定集合群組。從一個Cloud Firestore資料庫匯出的資料可以匯入另一個Cloud Firestore資料庫。您也可以將匯出內容載入 Cloud Firestore BigQuery。
本頁面說明如何使用代管匯出和匯入服務,以及 Cloud Storage 匯出及匯入 Cloud Firestore 文件。Cloud Firestore受管理匯出和匯入服務可透過 gcloud 指令列工具和 Cloud Firestore API (REST、RPC) 存取。
事前準備
如要使用匯出與匯入代管服務,請先完成下列工作:
- 為 Google Cloud 專案啟用計費功能。只有已啟用帳單的 Google Cloud 專案才能使用匯出和匯入功能。
- 在Cloud Firestore資料庫位置附近的位置,為專案建立 Cloud Storage bucket。您無法使用「要求者付費」bucket 或「快速 bucket」進行匯出和匯入作業。
-
請確認帳戶具備 Cloud Firestore 和 Cloud Storage 的必要權限。如果您是專案擁有者,您的帳戶就具備必要權限。否則,下列角色會授予匯出和匯入作業,以及存取 Cloud Storage 的必要權限:
- Cloud Firestore 角色:
Owner、Cloud Datastore Owner或Cloud Datastore Import Export Admin Cloud Storage 角色:
Owner或Storage Admin
- Cloud Firestore 角色:
服務代理權限
匯出和匯入作業會使用 Cloud Firestore 服務代理程式授權 Cloud Storage 作業。Cloud Firestore 服務代理程式使用下列命名慣例:
- Cloud Firestore 服務代理
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
如要進一步瞭解服務代理,請參閱服務代理。
Cloud Firestore 服務代理需要存取匯出或匯入作業中使用的 Cloud Storage 值區。如果您的 Cloud Storage bucket 與 Cloud Firestore 資料庫位於同一個專案,則 Cloud Firestore 服務代理預設可以存取 bucket。
如果 Cloud Storage 值區位於其他專案,則必須授權 Cloud Firestore 服務代理存取 Cloud Storage 值區。
指派角色給服務代理
您可以使用 gsutil 指令列工具指派下列其中一種角色。舉例來說,如要將「儲存空間管理員」角色指派給 Cloud Firestore 服務代理,請執行下列指令:
gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com:roles/storage.admin \ gs://[BUCKET_NAME]
將 PROJECT_NUMBER 替換為專案編號,這會用於命名 Cloud Firestore 服務代理程式。如要查看服務代理名稱,請參閱「查看服務代理名稱」。
或者,您也可以使用 Google Cloud 控制台指派這個角色。
查看服務代理名稱
您可以在 Google Cloud 控制台的「匯入/匯出」頁面中,查看匯入和匯出作業用來授權要求的帳戶。您也可以查看資料庫是否使用Cloud Firestore服務代理程式或舊版App Engine服務帳戶。
- 查看「匯入/匯出工作執行身分」標籤旁的授權帳戶。
服務代理需要 Cloud Storage bucket 的 Storage Admin 角色,才能用於匯出或匯入作業。
為專案設定 gcloud
您可以透過 Google Cloud 控制台或 gcloud 指令列工具啟動匯入和匯出作業。如要使用 gcloud,請設定指令列工具,並透過下列任一方式連線至專案:
使用 Cloud Shell,從 Google Cloud 控制台存取
gcloud。確保將
gcloud設定為正確的專案:gcloud config set project [PROJECT_ID]
匯出資料
匯出作業會將資料庫中的文件複製到 Cloud Storage bucket 中的一組檔案。請注意,匯出作業並非在匯出開始時擷取的資料庫快照。匯出作業可能包含作業執行期間所做的變更。
匯出所有文件
Google Cloud Console
前往 Google Cloud 控制台的「資料庫」頁面。
從資料庫清單中選取所需資料庫。
按一下導覽選單中的「匯入/匯出」。
按一下 [匯出]。
按一下「匯出整個資料庫」選項。
在「選擇目的地」下方,輸入 Cloud Storage bucket 的名稱,或使用「瀏覽」按鈕選取 bucket。
按一下 [匯出]。
控制台會返回「匯入/匯出」頁面。如果作業順利啟動,頁面會將項目新增至「最近的匯入和匯出作業」頁面。如果失敗,頁面會顯示錯誤訊息。
gcloud
使用 firestore export 指令匯出資料庫中的所有文件,並將 [BUCKET_NAME] 替換為 Cloud Storage bucket 的名稱。新增 --async 旗標,避免 gcloud 工具等待作業完成。
gcloud firestore export gs://[BUCKET_NAME] \ --database=[DATABASE]
更改下列內容:
BUCKET_NAME:在 bucket 名稱後方新增檔案前置字元,即可整理匯出內容,例如BUCKET_NAME/my-exports-folder/export-name。如果未提供檔案前置字元,代管匯出服務會根據目前的時間戳記建立前置字元。DATABASE:要匯出文件的資料庫名稱。如要使用預設資料庫,請使用--database='(default)'。
開始匯出作業後,關閉終端機不會取消作業,請參閱取消作業。
匯出特定集合群組
Google Cloud Console
前往 Google Cloud 控制台的「資料庫」頁面。
從資料庫清單中選取所需資料庫。
按一下導覽選單中的「匯入/匯出」。
按一下 [匯出]。
按一下「匯出一或多個集合群組」選項。使用選單選取一或多個集合群組。
在「選擇目的地」下方,輸入 Cloud Storage bucket 的名稱,或使用「瀏覽」按鈕選取 bucket。
按一下 [匯出]。
控制台會返回「匯入/匯出」頁面。如果作業順利啟動,頁面會將項目新增至「最近的匯入和匯出作業」頁面。如果失敗,頁面會顯示錯誤訊息。
gcloud
如要匯出特定集合群組,請使用 --collection-ids 旗標。這項作業只會匯出具有指定 ID 的集合群組。集合群組包含最終集合 ID 為集合群組 ID 的所有集合和子集合。
gcloud firestore export gs://[BUCKET_NAME] \ --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] \ --database=[DATABASE]
舉例來說,您可以在 foo 資料庫中設計 restaurants 集合,納入多個子集合,例如 ratings、reviews 或 outlets。如要匯出 reviews 產品素材資源集合群組,必須明確列出:
gcloud firestore export gs://[BUCKET_NAME] \ --collection-ids=reviews \ --database='cymbal'
如果改為指定 restaurants,系統就不會匯出 reviews 子集合中的文件。
從 PITR 時間戳記匯出
您可以從 PITR 資料匯出資料庫至 Cloud Storage。
您可以匯出過去七天內的時間點復原資料,但時間戳記必須是整分鐘的時間戳記,且不得早於 earliestVersionTime。如果指定時間戳記的資料已不存在,匯出作業就會失敗。
PITR 匯出作業支援所有篩選器,包括匯出所有文件和匯出特定集合群組。
匯出 PITR 資料前,請注意下列事項:
- 請以 RFC 3339 格式指定時間戳記。例如:
2023-05-26T10:20:00.00Z。 - 請確認指定的時間戳記是過去 7 天內的整分時間戳記,但不得早於
earliestVersionTime。如果指定時間戳記的資料已不存在,系統會產生錯誤。 - 如果 PITR 匯出作業失敗,系統不會收取任何費用。
控制台
-
前往 Google Cloud 控制台的「資料庫」頁面。
前往「資料庫」 - 從資料庫清單中選取資料庫。
- 按一下導覽選單中的「匯入/匯出」。
- 按一下 [匯出]。
- 設定匯出來源,匯出整個資料庫或僅匯出特定集合群組。
在「選擇要匯出的資料庫狀態」部分,選取「從較早的時間點匯出」。
選取要用於匯出的快照時間
- 在「Destination」(目的地) 部分中,輸入 Cloud Storage 值區名稱,或使用「Browse」(瀏覽) 按鈕選取值區。
-
按一下 [匯出]。
控制台會返回「匯入/匯出」頁面。如果作業順利開始,頁面會將項目新增至最近匯入及匯出頁面。如果失敗,頁面會顯示錯誤訊息。
gcloud
您可以使用 gcloud firestore export 指令,將資料庫匯出至 Cloud Storage 中的時間點還原 (PITR) 資料。
匯出資料庫,並將 snapshot-time 參數指定為復原時間戳記。執行下列指令,將資料庫匯出至 bucket。
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP]
其中 PITR_TIMESTAMP 是精細程度為分鐘的時間點復原時間戳記,例如 2023-05-26T10:20:00.00Z。
新增 --collection-ids 旗標,匯出特定集合群組。
匯入資料
將檔案匯出至「Cloud Storage」後,即可將這些檔案中的文件匯入專案或另一個專案。請注意下列匯入作業事項:
匯入資料時,系統會使用資料庫目前的索引定義更新必要索引。匯出內容不含索引定義。
匯入作業不會指派新的文件 ID,匯入作業會使用匯出時擷取的 ID。匯入文件時,系統會保留其 ID,避免 ID 衝突。如果已有 ID 相同的文件,匯入作業會覆寫現有文件。
如果資料庫中的文件不受匯入作業影響,匯入後仍會保留在資料庫中。
匯入作業不會觸發 Cloud Functions。快照監聽器會收到與匯入作業相關的更新。
匯入前,請勿新增不在原始匯出檔案中的 Cloud Firestore 文件,也不要從 GCS 檔案中移除任何現有文件。否則匯入作業會失敗。
.overall_export_metadata檔案名稱必須與上層資料夾的名稱相符:gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadata如果移動或複製匯出的輸出檔案,請保持 PARENT_FOLDER_NAME 和
.overall_export_metadata檔案名稱相同。
從匯出內容匯入所有文件
Google Cloud Console
前往 Google Cloud 控制台的「資料庫」頁面。
從資料庫清單中選取所需資料庫。
按一下導覽選單中的「匯入/匯出」。
按一下「匯入」。
在「Filename」(檔案名稱) 欄位中,輸入已完成匯出作業的
.overall_export_metadata檔案名稱。你可以使用「瀏覽」按鈕選取檔案。按一下「匯入」。
控制台會返回「匯入/匯出」頁面。如果作業順利啟動,頁面會將項目新增至「最近的匯入和匯出作業」頁面。如果失敗,頁面會顯示錯誤訊息。
gcloud
使用 firestore import 指令,從先前的匯出作業匯入文件。
gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ --database=[DATABASE]
更改下列內容:
BUCKET_NAME/EXPORT_PREFIX:匯出檔案的位置。DATABASE:資料庫名稱。如要使用預設資料庫,請使用--database='(default)'。
例如:
gcloud firestore import gs://my-bucket/2017-05-25T23:54:39_76544/ --database='cymbal'
您可以在 Google Cloud 控制台的Cloud Storage瀏覽器中,確認匯出檔案的位置:
啟動匯入作業後,關閉終端機不會取消作業,請參閱取消作業。
匯入特定集合群組
Google Cloud Console
您無法在控制台中選取特定集合群組。請改用 gcloud。
gcloud
如要從一組匯出檔案匯入特定集合群組,請使用 --collection-ids 旗標。這項作業只會匯入具有指定 ID 的集合群組。集合群組包含最終集合 ID 為集合群組 ID 的所有集合和子集合。使用 --database 旗標指定資料庫名稱。如要使用預設資料庫,請使用 --database='(default)'。
只有匯出特定集合群組時,才能匯入特定集合群組。如果匯出所有文件,就無法匯入特定集合群組。
gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ \ --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] \ --database=[DATABASE]
匯入 PITR 匯出內容
按照「匯入所有文件」一節中的步驟,匯入匯出的資料庫。如果資料庫中已有任何文件,系統會覆寫該文件。
管理匯出和匯入作業
啟動匯出或匯入作業後,Cloud Firestore 會為作業指派專屬名稱。您可以使用作業名稱刪除、取消或檢查作業狀態。
作業名稱會加上 projects/[PROJECT_ID]/databases/(default)/operations/ 前置字串,例如:
projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
不過,為 describe、cancel 和 delete 指令指定作業名稱時,可以省略前置字元。
列出所有匯出和匯入作業
Google Cloud Console
您可以在 Google Cloud 控制台的「匯入/匯出」頁面中,查看最近的匯出和匯入作業清單。
前往 Google Cloud 控制台的「資料庫」頁面。
從資料庫清單中選取所需資料庫。
按一下導覽選單中的「匯入/匯出」。
gcloud
使用 operations list 指令查看所有正在執行和最近完成的匯出及匯入作業:
gcloud firestore operations list
查看作業狀態
Google Cloud Console
您可以在 Google Cloud 控制台的「匯入/匯出」頁面中,查看最近匯出或匯入作業的狀態。
前往 Google Cloud 控制台的「資料庫」頁面。
從資料庫清單中選取所需資料庫。
按一下導覽選單中的「匯入/匯出」。
gcloud
使用 operations describe 指令顯示匯出或匯入作業的狀態。
gcloud firestore operations describe [OPERATION_NAME]
預估完成時間
用於取得長時間執行作業狀態的要求,會傳回 workEstimated 和 workCompleted 指標。每個指標都會以位元組數及實體數回傳:
workEstimated會顯示作業將要處理的位元組總數和文件總數預估值。如果無法估算,Cloud Firestore 可能會省略這項指標。workCompleted會顯示目前處理過的位元組數和文件數。作業完成後,該值會顯示實際處理的總位元數和文件數,可能大於workEstimated的值。
將 workCompleted 除以 workEstimated 可得出進度的粗估值。這項預估值可能不準確,因為是根據延遲的統計資料收集作業而得。
取消作業
Google Cloud Console
您可以在 Google Cloud 控制台的「匯入/匯出」頁面中,取消正在執行的匯出或匯入作業。
前往 Google Cloud 控制台的「資料庫」頁面。
從資料庫清單中選取所需資料庫。
按一下導覽選單中的「匯入/匯出」。 在「最近的匯入和匯出作業」表格中,目前執行的作業會在「已完成」欄中顯示「取消」按鈕。按一下「取消」按鈕即可停止作業。按鈕會先顯示「取消中」訊息,作業完全停止後則會顯示「已取消」。

gcloud
使用 operations cancel 指令停止進行中的作業:
gcloud firestore operations cancel [OPERATION_NAME]
取消正在執行的作業不會復原作業。取消匯出作業後,系統會將已匯出的文件留在 Cloud Storage 中;取消匯入作業後,系統會保留已對資料庫進行的更新。你無法匯入部分完成的匯出作業。
刪除作業
使用 gcloud firestore operations delete 指令從近期作業清單中移除作業。這個指令不會刪除 Cloud Storage 中的匯出檔案。
gcloud firestore operations delete [OPERATION_NAME]
匯出和匯入作業的計費及定價
使用匯出與匯入代管服務前,您需要先為 Google Cloud 專案啟用計費功能。
匯出和匯入作業會按照Cloud Firestore定價頁面列出的費率,針對文件讀取和寫入作業收費。匯出作業會針對匯出的每份文件產生一項讀取作業。匯入作業會為每個匯入的文件產生一項寫入作業。
儲存在 Cloud Storage 的輸出檔案會計入Cloud Storage 資料儲存費用。
匯出或匯入作業完成後,系統才會觸發Google Cloud預算快訊。匯出和匯入作業不會影響控制台使用情況部分顯示的使用量。
查看匯出和匯入費用
匯出和匯入作業會將 goog-firestoremanaged:exportimport 標籤套用至已計費的作業。在Cloud Billing 報表頁面中,您可以使用這個標籤查看與匯入和匯出作業相關的費用:

匯出至 BigQuery
您可以將 Cloud Firestore 匯出檔案中的資料載入 BigQuery,但前提是您已指定 collection-ids 篩選器。請參閱「從 Cloud Firestore 匯出檔案載入資料」。
BigQuery 欄數上限
BigQuery 對每個資料表設下 10,000 欄的限制。 Cloud Firestore匯出作業會為每個產品素材資源集合群組產生 BigQuery 資料表結構定義。在這個結構定義中,產品素材資源集合群組中的每個不重複欄位名稱都會成為結構定義資料欄。如果集合群組的 BigQuery 架構超過 10,000 欄,Cloud Firestore 匯出作業會將對應欄位視為位元組,盡量不超過欄數上限。如果轉換後欄數少於 10,000,您可以將資料載入 BigQuery,但無法查詢地圖欄位中的子欄位。如果欄數仍超過 10,000,匯出作業就不會為產品素材資源集合群組產生 BigQuery 結構定義,您也無法將資料載入 BigQuery。
匯出格式和中繼資料檔案
受管理匯出的輸出內容會使用 LevelDB 記錄格式。
中繼資料檔案
匯出作業會為您指定的每個產品素材資源集合群組建立中繼資料檔案。中繼資料檔案通常命名為 ALL_NAMESPACES_KIND_[COLLECTION_GROUP_ID].export_metadata。
中繼資料檔案是通訊協定緩衝區,您可以使用protoc通訊協定編譯器解碼。舉例來說,您可以解碼中繼資料檔案,判斷匯出檔案包含的集合群組:
protoc --decode_raw < export0.export_metadata
服務代理遷移
Cloud Firestore 會使用 Cloud Firestore 服務代理程式授權匯入和匯出作業,而不是使用 App Engine 服務帳戶。服務代理程式和服務帳戶使用下列命名慣例:
- Cloud Firestore 服務代理
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Cloud Firestore 先前使用App Engine預設服務帳戶,而非 Cloud Firestore 服務代理程式。如果資料庫仍使用 App Engine 服務帳戶匯入或匯出資料,建議按照本節的說明,改用 Cloud Firestore 服務代理。
- App Engine 服務帳戶
PROJECT_ID@appspot.gserviceaccount.com
建議使用 Cloud Firestore 服務代理,因為這是 Cloud Firestore 專用的代理。App Engine 服務帳戶由多項服務共用。
不相容。查看授權帳戶
您可以在 Google Cloud 控制台的「匯入/匯出」頁面中,查看匯入和匯出作業授權要求時使用的帳戶。您也可以查看資料庫是否已使用 Cloud Firestore 服務代理程式。
-
前往 Google Cloud 控制台的「資料庫」頁面。
- 從資料庫清單中選取所需資料庫。
-
按一下導覽選單中的「匯入/匯出」。
- 查看「匯入/匯出工作執行身分」標籤旁的授權帳戶。
如果專案未使用 Cloud Firestore 服務代理,可以透過下列任一方法遷移至 Cloud Firestore 服務代理:
- 檢查及更新 Cloud Storage bucket 權限 (建議),然後遷移專案。
- 新增機構層級的政策限制,影響範圍涵蓋機構內的所有專案。
建議使用第一種方法,因為這樣可將影響範圍限制在單一 Cloud Firestore 專案。第二種方法不建議使用,因為不會遷移現有的 Cloud Storage 儲存空間值區權限。不過,這項服務提供機構層級的安全合規性。
檢查及更新 Cloud Storage bucket 權限,然後進行遷移
遷移程序包含兩個步驟:
- 更新 Cloud Storage 值區權限。詳情請參閱下節。
- 確認要遷移至Cloud Firestore服務代理程式。
服務代理 bucket 權限
如要匯出或匯入作業使用Cloud Storage其他專案中的 bucket,請務必授予該 bucket 的Cloud Firestore服務代理程式權限。舉例來說,將資料移至其他專案的作業需要存取該專案中的值區。否則,在遷移至 Cloud Firestore 服務代理程式後,這些作業就會失敗。
如果匯入和匯出工作流程都在同一個專案中,就不需要變更權限。根據預設,Cloud Firestore 服務代理可以存取同一個專案中的 bucket。
更新其他專案的 Cloud Storage bucket 權限,授予service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com服務代理程式存取權。將 Firestore Service Agent 角色授予服務代理。
Firestore Service Agent 角色可授予 Cloud Storage bucket 的讀取和寫入權限。如要只授予讀取或寫入權限,請使用自訂角色。
下一節所述的遷移程序可協助您找出可能需要更新權限的 Cloud Storage buckets。
將專案遷移至 Firestore 服務代理人
請完成下列步驟,從 App Engine 服務帳戶遷移至 Cloud Firestore 服務代理。遷移作業完成後即無法復原。
-
前往 Google Cloud 控制台的「資料庫」頁面。
- 從資料庫清單中選取所需資料庫。
-
按一下導覽選單中的「匯入/匯出」。
-
如果專案尚未遷移至 Cloud Firestore 服務代理程式,您會看到說明遷移作業的橫幅和「檢查 Bucket 狀態」按鈕。下一個步驟將協助您找出並修正潛在的權限錯誤。
按一下「Check Bucket Status」(檢查 Bucket 狀態)。
系統會顯示選單,提供完成遷移作業的選項和 Cloud Storage bucket 清單。清單可能需要幾分鐘才能載入完成。
這份清單包含最近用於匯入和匯出作業的 bucket,但目前未授予 Cloud Firestore 服務代理程式讀取和寫入權限。
- 請記下專案Cloud Firestore服務代理程式的主體名稱。服務代理名稱會顯示在「Service agent to give access to」(要授予存取權的服務代理) 標籤下方。
-
如要將清單中的任何值區用於日後的匯入或匯出作業,請完成下列步驟:
-
在該值區的表格列中,按一下「修正」。 系統會在新的分頁中開啟該值區的權限頁面。
- 按一下 [新增]。
- 在「New principals」(新增主體) 欄位中,輸入服務代理的名稱。Cloud Firestore
- 在「選取角色」欄位中,依序選取「服務代理」>「Firestore 服務代理」。
- 按一下 [儲存]。
- 返回「匯入/匯出」Cloud Firestore頁面的分頁。
- 針對清單中的其他 bucket 重複上述步驟。請務必查看清單的所有頁面。
-
-
按一下「遷移至 Firestore 服務代理程式」。如果仍有儲存空間的權限檢查失敗,請按一下「遷移」,確認要遷移。
遷移作業完成後,系統會發出快訊通知。遷移作業無法復原。
查看遷移狀態
如要確認專案的遷移狀態,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「資料庫」頁面。
- 從資料庫清單中選取所需資料庫。
-
按一下導覽選單中的「匯入/匯出」。
-
在「Import/Export jobs run as」(匯入/匯出工作執行身分) 標籤旁,尋找主體。
如果主體是
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com,表示專案已遷移至 Cloud Firestore 服務代理。遷移作業無法復原。如果專案尚未遷移,頁面頂端會顯示橫幅和「檢查 Bucket 狀態」按鈕。請參閱「遷移至 Firestore 服務代理程式」,完成遷移作業。
新增全機構適用的政策限制
-
在貴機構的政策中設定下列限制條件:
必須使用 Firestore 服務代理才能執行匯入/匯出工作 (
firestore.requireP4SAforImportExport)。這項限制會要求匯入和匯出作業使用 Cloud Firestore 服務代理程式授權要求。如要設定這項限制,請參閱「 建立及管理組織政策 」。
套用這項機構政策限制時,系統不會自動為 Cloud Firestore 服務代理授予適當的 Cloud Storage bucket 權限。
如果限制條件導致任何匯入或匯出工作流程發生權限錯誤,可以停用限制條件,改回使用預設服務帳戶。檢查並更新 Cloud Storage 儲存空間的權限後,即可再次啟用限制。