Halaman ini menjelaskan cara mengekspor dan mengimpor entity Firestore dalam mode Datastore menggunakan layanan ekspor dan impor terkelola. Layanan ekspor dan impor terkelola tersedia melalui konsol Google Cloud, Google Cloud CLI, dan Datastore Admin API (REST, RPC).
Dengan layanan ekspor dan impor terkelola, Anda dapat memulihkan data yang tidak sengaja terhapus dan mengekspor data untuk pemrosesan offline. Anda dapat mengekspor semua entity atau hanya jenis entity tertentu. Demikian pula, Anda dapat mengimpor semua data dari ekspor atau hanya jenis tertentu. Saat Anda menggunakan layanan ekspor dan impor terkelola, pertimbangkan hal-hal berikut:
Layanan ekspor menggunakan pembacaan yang akhirnya konsisten. Anda tidak dapat mengasumsikan bahwa ekspor terjadi pada satu titik waktu. Ekspor mungkin menyertakan entity yang ditulis setelah ekspor dimulai dan mengecualikan entity yang ditulis sebelum ekspor dimulai.
Ekspor tidak berisi indeks apa pun. Saat Anda mengimpor data, indeks yang diperlukan akan otomatis dibuat ulang menggunakan definisi indeks database Anda saat ini. Setelan indeks nilai properti per entity diekspor dan dipatuhi selama impor.
Impor tidak menetapkan ID baru ke entity. Impor menggunakan ID yang ada pada saat ekspor dan menimpa entitas yang ada dengan ID yang sama. Selama impor, ID dicadangkan selama entity sedang diimpor. Fitur ini mencegah konflik ID dengan entity baru jika penulisan diaktifkan saat impor berjalan.
Jika entitas dalam database Anda tidak terpengaruh oleh impor, entitas tersebut akan tetap berada di database setelah impor selesai.
Data yang diekspor dari satu database mode Datastore dapat diimpor ke database mode Datastore lainnya, bahkan database di project lain.
Layanan ekspor dan impor terkelola membatasi jumlah ekspor dan impor serentak hingga 50 dan mengizinkan maksimum 20 permintaan ekspor dan impor per menit untuk sebuah project. Untuk setiap permintaan, layanan membatasi jumlah kombinasi filter entity hingga 100.
Output ekspor yang dikelola menggunakan format log LevelDB.
Untuk hanya mengimpor sebagian entity atau mengimpor data ke BigQuery, Anda harus menentukan filter entity dalam ekspor.
Nama file
.overall_export_metadata
harus sama dengan nama folder induknya:gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadata
Jika Anda memindahkan atau menyalin file output ekspor, pastikan
PARENT_FOLDER_NAME
, isi subfolder, dan nama file.overall_export_metadata
tetap sama.
Sebelum memulai
Sebelum dapat menggunakan layanan ekspor dan impor terkelola, Anda harus menyelesaikan tugas-tugas berikut.
Aktifkan penagihan untuk project Google Cloud Anda. Hanya project Google Cloud dengan penagihan aktif yang dapat menggunakan fitur ekspor dan impor.
Buat bucket Cloud Storage di lokasi yang sama dengan database Firestore dalam mode Datastore. Anda tidak dapat menggunakan bucket Requester Pays untuk operasi ekspor dan impor.
Tetapkan peran IAM ke akun pengguna yang memberikan izin
datastore.databases.export
, jika Anda mengekspor data, atau izindatastore.databases.import
, jika Anda mengimpor data. Misalnya, peranDatastore Import Export Admin
memberikan kedua izin tersebut.Jika bucket Cloud Storage berada dalam project lain, berikan akses ke bucket kepada agen layanan Firestore.
Menyiapkan gcloud
untuk project Anda
Jika Anda berencana menggunakan gcloud
untuk memulai operasi impor dan ekspor, siapkan gcloud
dan hubungkan ke project Anda dengan salah satu cara berikut:
Akses
gcloud
dari konsol Google Cloud menggunakan Cloud Shell.Konfigurasikan gcloud CLI untuk menggunakan project saat ini:
gcloud config set project project-id
Izin
Untuk menjalankan operasi ekspor dan impor, akun pengguna dan agen layanan mode Datastore project Anda memerlukan izin berikut Pengelolaan Akses dan Identitas.
Izin akun pengguna
Akun pengguna atau akun layanan yang memulai operasi memerlukan izin IAM datastore.databases.export
dan datastore.databases.import
. Jika Anda adalah pemilik project, akun Anda memiliki izin yang diperlukan. Jika tidak, peran IAM berikut akan memberikan izin yang diperlukan:
- Pemilik Datastore
- Datastore Import Export Admin
Anda juga dapat menetapkan izin ini dengan peran khusus.
Pemilik project dapat memberikan salah satu peran tersebut dengan mengikuti langkah-langkah di bagian Berikan akses.
Izin agen layanan
Operasi ekspor dan impor menggunakan agen layanan Firestore untuk mengizinkan operasi Cloud Storage. Agen layanan Firestore menggunakan konvensi penamaan berikut:
- Agen layanan Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Untuk mempelajari lebih lanjut agen layanan, lihat Agen layanan.
Agen layanan Firestore memerlukan akses ke bucket Cloud Storage yang digunakan dalam operasi ekspor atau impor. Jika bucket Cloud Storage berada dalam project yang sama dengan database Firestore, agen layanan Firestore dapat mengakses bucket secara default.
Jika bucket Cloud Storage berada dalam project lain, Anda harus memberi agen layanan Firestore akses ke bucket Cloud Storage.
Menetapkan peran ke agen layanan
Anda dapat menggunakan alat command line gsutil untuk menetapkan salah satu peran di bawah ini. Misalnya, untuk menetapkan peran Storage Admin ke agen layanan Firestore, jalankan perintah berikut:
gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com:roles/storage.admin \ gs://[BUCKET_NAME]
Ganti PROJECT_NUMBER
dengan nomor project yang
digunakan untuk memberi nama agen layanan Firestore. Untuk melihat
nama agen layanan, lihat Melihat nama agen layanan.
Atau, Anda dapat menetapkan peran ini menggunakan konsol Google Cloud.
Melihat nama agen layanan
Anda dapat melihat akun yang digunakan operasi impor dan ekspor untuk mengizinkan permintaan dari halaman Import/Export di konsol Google Cloud. Anda juga dapat melihat apakah database menggunakan agen layanan Firestore atau akun layanan App Engine lama.
-
Di konsol Google Cloud, buka halaman Databases.
-
Pilih database yang diperlukan dari daftar database.
-
Di menu navigasi, klik Import/Export.
- Lihat akun otorisasi di samping label Import/Export jobs run as.
Operasi ekspor
Untuk operasi ekspor yang melibatkan bucket di project lain, ubah izin bucket untuk menetapkan salah satu peran Identity and Access Management berikut ke agen layanan mode Datastore project yang berisi database mode Datastore Anda:
- Storage Admin
- Pemilik (peran dasar)
Anda juga dapat membuat peran khusus IAM dengan izin yang sedikit berbeda dari yang terdapat dalam peran yang tercantum sebelumnya:
storage.buckets.get
storage.objects.create
storage.objects.delete
storage.objects.list
Operasi impor
Untuk operasi impor yang melibatkan bucket Cloud Storage di project lain, ubah izin bucket untuk menetapkan salah satu peran Cloud Storage berikut ke agen layanan mode Datastore project yang berisi database mode Datastore Anda:
- Storage Admin
- Storage Object Viewer dan Storage Legacy Bucket Reader
Anda juga dapat membuat peran khusus IAM dengan izin berikut:
storage.buckets.get
storage.objects.get
Memulai operasi ekspor dan impor terkelola
Bagian ini menjelaskan cara memulai operasi ekspor atau impor terkelola.
Mengekspor semua entity
Konsol
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
- Di menu navigasi, klik Import/Export.
- Klik Ekspor.
- Tetapkan kolom Namespace ke
All Namespaces
, dan tetapkan kolom Kind keAll Kinds
. - Di bawah Destination, masukkan nama bucket Cloud Storage Anda.
- Klik Ekspor.
Konsol akan kembali ke halaman Import/Export. Notifikasi melaporkan keberhasilan atau kegagalan permintaan ekspor terkelola Anda.
gcloud
Gunakan perintah gcloud firestore export
untuk mengekspor semua entity dalam database Anda.
gcloud firestore export gs://bucket-name --async --database=DATABASE
dengan bucket-name adalah nama bucket Cloud Storage Anda dan awalan opsional, misalnya,
bucket-name/datastore-exports/export-name
. Anda tidak dapat
menggunakan kembali awalan yang sama untuk operasi ekspor
lain. Jika Anda tidak memberikan awalan file, layanan ekspor terkelola akan membuat awalan file berdasarkan waktu saat ini.
Gunakan flag [--async
][async-flag] untuk mencegah gcloud
menunggu operasi selesai. Jika Anda menghilangkan flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan tanda --database
ke nama database tempat Anda ingin mengekspor entity. Untuk database default, gunakan --database='(default)'
.
istirahat
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- project-id: project ID Anda
- bucket-name: nama bucket Cloud Storage Anda
Metode HTTP dan URL:
POST https://datastore.googleapis.com/v1/projects/project-id:export
Meminta isi JSON:
{ "outputUrlPrefix": "gs://bucket-name", }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-09-18T18:42:26.591949Z", "operationType": "EXPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": {}, "outputUrlPrefix": "gs://bucket-name/2019-09-18T18:42:26_85726" } }
Mengekspor jenis atau namespace tertentu
Untuk mengekspor subset jenis dan/atau namespace tertentu, berikan filter entity dengan nilai untuk jenis dan ID namespace. Setiap permintaan dibatasi hingga 100 kombinasi filter entity, dengan setiap kombinasi jenis dan namespace yang difilter dihitung sebagai filter terpisah terhadap batas ini.
Konsol
Di konsol, Anda dapat memilih semua jenis atau satu jenis tertentu. Demikian pula, Anda dapat memilih semua namespace atau satu namespace tertentu.
Untuk menentukan daftar namespace dan jenis yang akan diekspor, gunakan gcloud
.
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Import/Export.
Klik Ekspor.
Tetapkan kolom Namespace ke
All Namespaces
atau ke nama salah satu namespace Anda.Tetapkan kolom Kind ke
All Kinds
atau ke nama jenis.Di bagian Destination, masukkan nama bucket Cloud Storage Anda.
Klik Ekspor.
Konsol akan kembali ke halaman Import/Export. Notifikasi melaporkan keberhasilan atau kegagalan permintaan ekspor terkelola Anda.
gcloud
gcloud firestore export --collection-ids="KIND1,KIND2" \ --namespaces="(default),NAMESPACE2" \ gs://bucket-name \ --async \ --database=DATABASE
dengan bucket-name adalah nama bucket Cloud Storage Anda dan awalan opsional, misalnya,
bucket-name/datastore-exports/export-name
. Anda tidak dapat
menggunakan kembali awalan yang sama untuk operasi ekspor
lain. Jika Anda tidak memberikan awalan file, layanan ekspor terkelola akan membuat awalan file berdasarkan waktu saat ini.
Gunakan flag [--async
][async-flag] untuk mencegah gcloud
menunggu operasi selesai. Jika Anda menghilangkan flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan tanda --database
ke nama database tempat Anda ingin mengekspor jenis atau namespace tertentu. Untuk database default, gunakan --database='(default)'
.
istirahat
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- project-id: project ID Anda
- bucket-name: nama bucket Cloud Storage Anda
- kind: jenis entity
- namespace: ID namespace (gunakan "" untuk ID namespace default)
Metode HTTP dan URL:
POST https://datastore.googleapis.com/v1/projects/project-id:export
Meminta isi JSON:
{ "outputUrlPrefix": "gs://bucket-name", "entityFilter": { "kinds": ["kind"], "namespaceIds": ["namespace"], }, }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:17:36.232704Z", "operationType": "EXPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": { "kinds": [ "Task" ], "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name/2019-09-18T21:17:36_82974" } }
File metadata
Operasi ekspor akan membuat file metadata untuk setiap pasangan jenis namespace yang ditentukan. File metadata biasanya bernama NAMESPACE_NAME_KIND_NAME.export_metadata
. Namun, jika namespace atau jenis akan membuat nama objek Cloud Storage yang tidak valid, file akan diberi nama export[NUM].export_metadata
.
File metadata adalah buffering protokol dan dapat didekode dengan compiler protokol protoc
.
Misalnya, Anda dapat mendekode file metadata untuk menentukan namespace dan jenis yang ada di file ekspor:
protoc --decode_raw < export0.export_metadata
Mengimpor semua entity
Konsol
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Import/Export.
Klik Import.
Di kolom
File
, klik Browse dan pilih file.overall_export_metadata
.Pastikan file
.overall_export_metadata
tidak dipindahkan dari lokasi default.Tetapkan kolom Namespace ke
All Namespaces
, dan tetapkan kolom Kind keAll Kinds
.Klik Import.
Konsol akan kembali ke halaman Import/Export. Notifikasi melaporkan keberhasilan atau kegagalan permintaan impor terkelola Anda.
gcloud
Gunakan perintah gcloud firestore import untuk mengimpor semua entity yang sebelumnya diekspor dengan layanan ekspor terkelola.
gcloud firestore import gs://bucket-name/file-path/file-name.overall_export_metadata \ --async \ --database=DATABASE
dengan bucket-name/file-path/file-name adalah jalur ke file overall_export_metadata
dalam bucket Cloud Storage Anda.
Gunakan flag [--async
][async-flag] untuk mencegah gcloud
menunggu operasi selesai. Jika Anda menghilangkan flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan tanda --database
ke nama database tempat Anda ingin mengimpor semua entity. Untuk database default, gunakan --database='(default)'
.
istirahat
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- project-id: project ID Anda
- bucket-name: nama bucket Cloud Storage Anda
- object-name: nama objek Cloud Storage Anda (contoh:
2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
Metode HTTP dan URL:
POST https://datastore.googleapis.com/v1/projects/project-id:import
Meminta isi JSON:
{ "inputUrl": "gs://bucket-name/object-name", }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:25:02.863621Z", "operationType": "IMPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": {}, "inputUrl": "gs://bucket-name/2019-09-18T18:42:26_85726/2019-09-18T18:42:26_85726.overall_export_metadata" } }
Menemukan file overall_export_metadata
Anda dapat menentukan nilai yang akan digunakan untuk lokasi impor menggunakan browser Cloud Storage di konsol Google Cloud:
Anda juga dapat mencantumkan dan mendeskripsikan operasi
yang telah selesai. Kolom outputURL
menampilkan nama
file overall_export_metadata
:
"outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata",
Mengimpor jenis atau namespace tertentu
Untuk mengimpor subset jenis dan/atau namespace tertentu, berikan filter entity dengan nilai untuk jenis dan ID namespace.
Anda dapat menentukan jenis dan namespace hanya jika file ekspor dibuat dengan filter entity. Anda tidak dapat mengimpor subkumpulan jenis dan namespace dari ekspor semua entity.
Konsol
Di konsol, Anda dapat memilih semua jenis atau satu jenis tertentu. Demikian pula, Anda dapat memilih semua namespace atau satu namespace tertentu.
Untuk menentukan daftar namespace dan jenis yang akan diimpor, gunakan gcloud
.
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Import/Export.
Klik Import.
Di kolom
File
, klik Browse dan pilih file.overall_export_metadata
.Pastikan Anda mengimpor file
.overall_export_metadata
, bukan file.export_metadata
.Tetapkan kolom Namespace ke
All Namespaces
atau ke namespace tertentu.Tetapkan kolom Jenis ke
All Kinds
atau ke jenis tertentu.Klik Import.
Konsol akan kembali ke halaman Import/Export. Notifikasi melaporkan keberhasilan atau kegagalan permintaan impor terkelola Anda.
gcloud
gcloud firestore import --collection-ids="KIND1,KIND2" \ --namespaces="(default),NAMESPACE2" \ gs://bucket-name/file-path/file-nameoverall_export_metadata \ --async \ --database=DATABASE
dengan bucket-name/file-path/file-name adalah jalur ke file overall_export_metadata
dalam bucket Cloud Storage Anda.
Gunakan flag [--async
][async-flag] untuk mencegah gcloud
menunggu operasi selesai. Jika Anda menghilangkan flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan tanda --database
ke nama database tempat Anda ingin mengimpor jenis atau namespace tertentu. Untuk database default, gunakan --database='(default)'
.
istirahat
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- project-id: project ID Anda
- bucket-name: nama bucket Cloud Storage Anda
- object-name: nama objek Cloud Storage Anda (contoh:
2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
- kind: jenis entity
- namespace: ID namespace (gunakan "" untuk ID namespace default)
Metode HTTP dan URL:
POST https://datastore.googleapis.com/v1/projects/project-id:import
Meminta isi JSON:
{ "inputUrl": "gs://bucket-name/object-name", "entityFilter": { "kinds": ["kind"], "namespaceIds": ["namespace"], }, }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:51:02.830608Z", "operationType": "IMPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": { "kinds": [ "Task" ], "namespaceIds": [ "" ] }, "inputUrl": "gs://bucket-name/2019-09-18T21:49:25_96833/2019-09-18T21:49:25_96833.overall_export_metadata" } }
Mengekspor dan mengimpor dari data PITR
Anda dapat mengekspor database ke Cloud Storage dari data PITR menggunakan perintah gcloud firestore export
. Anda dapat mengekspor data PITR dengan stempel waktu satu menit dalam tujuh hari terakhir, tetapi tidak lebih awal dari earliestVersionTime
. Jika data tidak lagi ada di stempel waktu yang ditentukan, operasi ekspor akan gagal.
Operasi ekspor PITR mendukung semua filter, termasuk mengekspor semua entity dan mengekspor jenis atau namespace tertentu.
Ekspor database, dengan menentukan parameter
snapshot-time
ke stempel waktu pemulihan yang diperlukan.gcloud
Jalankan perintah berikut untuk mengekspor database ke bucket Anda.
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP] \ --collection-ids=[COLLECTION_IDS] \ --namespace-ids=[NAMESPACE_IDS]
Dengan,
PITR_TIMESTAMP
- stempel waktu PITR pada tingkat perincian menit, misalnya,2023-05-26T10:20:00.00Z
.
[Mengekspor subkumpulan jenis dan/atau namespace tertentu dengan filter entity][export-kind] juga didukung.
Perhatikan hal-hal berikut sebelum mengekspor data PITR:
- Tentukan stempel waktu dalam format RFC 3339.
Contoh,
2020-09-01T23:59:30.234233Z
. - Pastikan stempel waktu yang Anda tentukan adalah stempel waktu keseluruhan satu menit dalam tujuh hari terakhir, tetapi tidak lebih awal dari
earliestVersionTime
. Jika data tidak lagi ada pada stempel waktu yang ditentukan, Anda akan menerima pesan error. - Anda tidak akan ditagih untuk ekspor PITR yang gagal.
Mengimpor ke database.
Gunakan langkah-langkah di bagian Mengimpor semua entitas untuk mengimpor database yang telah diekspor. Jika ada entity yang sudah ada dalam database Anda, entity tersebut akan ditimpa. [Mengimpor subkumpulan jenis dan/atau namespace tertentu dengan filter entity][import-kind] juga didukung.
Mengimpor transformasi
Saat mengimpor entity dari project lain, perlu diingat bahwa kunci entity menyertakan project ID. Operasi impor memperbarui kunci entity dan properti referensi kunci dalam data impor dengan project ID project tujuan. Jika update ini meningkatkan ukuran entity, hal ini dapat menyebabkan error "entity terlalu besar" atau "entri indeks terlalu besar" untuk operasi impor.
Untuk menghindari salah satu error tersebut, impor ke project tujuan dengan project ID yang lebih singkat. Hal ini tidak memengaruhi operasi impor dengan data dari project yang sama.
Mengelola operasi yang berjalan lama
Operasi impor dan ekspor terkelola adalah operasi yang berjalan lama. Panggilan metode ini dapat memerlukan waktu yang cukup lama untuk diselesaikan.
Setelah Anda memulai operasi ekspor atau impor, mode Datastore akan menetapkan nama unik pada operasi tersebut. Anda dapat menggunakan nama operasi untuk menghapus, membatalkan, atau memeriksa status operasi.
Nama operasi diawali dengan projects/[PROJECT_ID]/databases/(default)/operations/
, misalnya:
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Anda dapat tidak menyertakan awalan saat menentukan nama operasi untuk perintah gcloud
.
Mencantumkan semua operasi yang berjalan lama
Anda dapat melihat operasi yang sedang berlangsung dan yang baru saja selesai dengan cara berikut. Operasi tercantum selama beberapa hari setelah selesai:
Konsol
Anda dapat melihat daftar operasi yang berjalan lama di halaman Import/Export di konsol Google Cloud.
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Import/Export.
gcloud
Untuk mencantumkan operasi yang berjalan lama, gunakan perintah gcloud datastore operations list.
gcloud datastore operations list
Misalnya, operasi ekspor yang baru saja selesai menampilkan informasi berikut:
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2017-12-05T23:01:39.583780Z", "endTime": "2017-12-05T23:54:58.474750Z", "operationType": "EXPORT_ENTITIES" }, "progressEntities": { "workCompleted": "21933027", "workEstimated": "21898182" }, "progressBytes": { "workCompleted": "12421451292", "workEstimated": "9759724245" }, "entityFilter": { "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata" } } ] }
istirahat
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- project-id: project ID Anda
Metode HTTP dan URL:
GET https://datastore.googleapis.com/v1/projects/project-id/operations
Untuk mengirim permintaan, perluas salah satu opsi berikut:
Lihat informasi tentang respons di bawah.
Misalnya, operasi ekspor yang baru saja selesai menampilkan informasi berikut:
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2017-12-05T23:01:39.583780Z", "endTime": "2017-12-05T23:54:58.474750Z", "operationType": "EXPORT_ENTITIES" }, "progressEntities": { "workCompleted": "21933027", "workEstimated": "21898182" }, "progressBytes": { "workCompleted": "12421451292", "workEstimated": "9759724245" }, "entityFilter": { "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata" } } ] }
Memeriksa status operasi
Untuk melihat status operasi yang berjalan lama:
Konsol
Anda dapat melihat daftar operasi ekspor dan impor terbaru di halaman Import/Export di konsol Google Cloud.
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Import/Export.
gcloud
Gunakan perintah operations describe
untuk menampilkan status operasi yang berjalan lama.
gcloud datastore operations describe operation-name
istirahat
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- project-id: project ID Anda
- operation-name: nama operasi
Metode HTTP dan URL:
GET https://datastore.googleapis.com/v1/projects/project-id/operations/operation-name
Untuk mengirim permintaan, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/project-id/operations/ASA3ODAwMzQxNjIyChp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKLRI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-10-08T20:07:28.105236Z", "endTime": "2019-10-08T20:07:36.310653Z", "operationType": "EXPORT_ENTITIES", "state": "SUCCESSFUL" }, "progressEntities": { "workCompleted": "21", "workEstimated": "21" }, "progressBytes": { "workCompleted": "2272", "workEstimated": "2065" }, "entityFilter": {}, "outputUrlPrefix": "gs://bucket-name/2019-10-08T20:07:28_28481" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2019-10-08T20:07:28_28481/2019-10-08T20:07:28_28481.overall_export_metadata" } }
Memperkirakan waktu penyelesaian
Saat operasi berjalan, lihat nilai kolom state
untuk mengetahui status operasi secara keseluruhan.
Permintaan untuk status operasi yang berjalan lama akan menampilkan metrik workEstimated
dan workCompleted
. Setiap metrik tersebut ditampilkan baik dalam jumlah byte maupun jumlah entity:
workEstimated
menampilkan estimasi total jumlah byte dan dokumen yang akan diproses oleh sebuah operasi. Mode Datastore mungkin menghilangkan metrik ini jika tidak dapat membuat perkiraan.workCompleted
menunjukkan jumlah byte dan dokumen yang diproses sejauh ini. Setelah operasi selesai, nilai akan menunjukkan jumlah total byte dan dokumen yang benar-benar diproses, dan mungkin lebih besar dari nilaiworkEstimated
.
Bagilah workCompleted
dengan workEstimated
untuk mengetahui perkiraan kasar dari progresnya. Perkiraan ini mungkin tidak akurat karena bergantung pada koleksi statistik yang tertunda.
Misalnya, berikut adalah status progres operasi ekspor:
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", ... "progressEntities": { "workCompleted": "1", "workEstimated": "3" }, "progressBytes": { "workCompleted": "85", "workEstimated": "257" }, ...
Saat operasi selesai, deskripsi operasi akan berisi "done":
true
. Lihat nilai kolom state
untuk menemukan hasil operasi. Jika kolom done
tidak ditetapkan dalam respons, maka nilainya adalah false
. Jangan bergantung pada keberadaan nilai done
untuk operasi yang sedang berlangsung.
Membatalkan operasi
Konsol
Anda dapat membatalkan operasi ekspor atau impor yang sedang berjalan di halaman Import/Export di konsol Google Cloud.
Di konsol Google Cloud, buka halaman Databases.
Pilih database yang diperlukan dari daftar database.
Di menu navigasi, klik Import/Export.
Di tabel Recent imports and exports, operasi yang saat ini sedang berjalan menyertakan tombol Cancel di kolom Completed. Klik tombol Cancel untuk menghentikan operasi. Tombol akan berubah menjadi pesan Cancelling kemudian Cancelled saat operasi berhenti sepenuhnya.
gcloud
Gunakan perintah operations cancel
untuk menghentikan operasi yang sedang berlangsung:
gcloud datastore operations cancel operation-name
Jika operasi yang sedang berjalan dibatalkan, operasi tersebut tidak akan diurungkan. Operasi ekspor yang dibatalkan akan membiarkan dokumen yang telah diekspor di dalam Cloud Storage, sedangkan operasi impor yang dibatalkan akan membiarkan update yang sudah dilakukan pada database Anda. Anda tidak dapat mengimpor ekspor yang selesai sebagian.
Menghapus operasi
gcloud
Gunakan perintah operations delete
untuk menghapus operasi dari daftar operasi terbaru. Perintah ini tidak akan menghapus file ekspor dari Cloud Storage.
gcloud datastore operations delete operation-name
Penagihan dan harga untuk ekspor dan impor terkelola
Anda harus mengaktifkan penagihan untuk project Google Cloud sebelum menggunakan layanan ekspor dan impor terkelola. Operasi ekspor dan impor berkontribusi pada biaya Google Cloud Anda dengan cara berikut:
- Operasi baca dan tulis entity yang dilakukan oleh operasi ekspor dan impor diperhitungkan dalam biaya Firestore dalam mode Datastore. Operasi ekspor menimbulkan satu operasi baca per entity yang diekspor. Operasi impor menimbulkan satu operasi tulis per entity yang diimpor.
- File output yang disimpan di Cloud Storage memengaruhi biaya penyimpanan data Cloud Storage Anda.
Operasi ekspor atau impor tidak akan memicu pemberitahuan anggaran Google Cloud hingga operasi selesai. Demikian pula, operasi baca dan tulis yang dilakukan selama operasi ekspor atau impor akan diterapkan pada kuota harian Anda setelah operasi selesai.
Melihat biaya ekspor dan impor
Operasi ekspor dan impor menerapkan label goog-firestoremanaged:exportimport
ke operasi yang ditagih. Di halaman Cloud Billing reports, Anda dapat menggunakan label ini untuk melihat biaya yang terkait dengan operasi impor dan ekspor:
Perbedaan dengan pencadangan Admin Datastore
Jika sebelumnya Anda menggunakan konsol Admin Datastore untuk pencadangan, Anda harus memperhatikan perbedaan berikut:
Ekspor yang dibuat oleh ekspor terkelola tidak muncul di konsol Admin Datastore. Ekspor dan impor terkelola adalah layanan baru yang tidak membagikan data dengan fitur pencadangan dan pemulihan App Engine, yang dikelola melalui konsol Google Cloud.
Layanan ekspor dan impor terkelola tidak mendukung metadata yang sama dengan pencadangan Datastore Admin dan tidak menyimpan status progres di database Anda. Untuk informasi tentang cara memeriksa progres operasi ekspor dan impor, lihat Mengelola operasi yang berjalan lama
Anda tidak dapat melihat log layanan operasi ekspor dan impor terkelola.
Layanan impor terkelola kompatibel dengan file cadangan Admin Datastore versi sebelumnya. Anda dapat mengimpor file cadangan Datastore Admin menggunakan layanan impor terkelola, tetapi tidak dapat mengimpor output ekspor terkelola menggunakan konsol Datastore Admin.
Mengimpor ke BigQuery
Untuk mengimpor data dari ekspor terkelola ke BigQuery, lihat Memuat data layanan ekspor Datastore.
Data yang diekspor tanpa menentukan filter entity tidak dapat dimuat ke BigQuery. Jika Anda ingin mengimpor data ke BigQuery, permintaan ekspor Anda harus menyertakan satu atau beberapa nama jenis dalam filter entity.
Batas kolom BigQuery
BigQuery menetapkan batas 10.000 kolom per tabel. Operasi ekspor menghasilkan skema tabel BigQuery untuk setiap jenis. Dalam skema ini, setiap properti unik dalam entity jenis menjadi kolom skema.
Jika skema BigQuery jenis melebihi 10.000 kolom, operasi ekspor akan berupaya agar tidak melebihi batas kolom dengan memperlakukan entity tersemat sebagai blob. Jika konversi ini menghasilkan jumlah kolom dalam skema kurang dari 10.000, Anda dapat memuat data ke BigQuery, tetapi tidak dapat membuat kueri properti dalam entity tersemat. Jika jumlah kolom masih melampaui 10.000, operasi ekspor tidak menghasilkan skema BigQuery untuk jenis tersebut dan Anda tidak dapat memuat datanya ke BigQuery.
Migrasi agen layanan
Firestore menggunakan agen layanan Firestore untuk mengizinkan operasi impor dan ekspor, bukan akun layanan App Engine. Agen layanan dan akun layanan menggunakan konvensi penamaan berikut:
- Agen layanan Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Firestore sebelumnya menggunakan akun layanan default App Engine, bukan agen layanan Firestore. Jika database Anda masih menggunakan akun layanan App Engine untuk mengimpor atau mengekspor data, sebaiknya ikuti petunjuk di bagian ini untuk bermigrasi menggunakan agen layanan Firestore.
- Akun layanan App Engine
PROJECT_ID@appspot.gserviceaccount.com
Agen layanan Firestore lebih disukai karena khusus untuk Firestore. Akun layanan App Engine digunakan bersama oleh lebih dari satu layanan.
Melihat akun otorisasi
Anda dapat melihat akun yang digunakan oleh operasi impor dan ekspor untuk mengizinkan permintaan dari halaman Import/Export di konsol Google Cloud. Anda juga dapat melihat apakah database Anda sudah menggunakan agen layanan Firestore.
-
Di konsol Google Cloud, buka halaman Databases.
- Pilih database yang diperlukan dari daftar database.
-
Di menu navigasi, klik Import/Export.
- Lihat akun otorisasi di samping label Import/Export jobs run as.
Jika project tidak menggunakan agen layanan Firestore, Anda dapat bermigrasi ke agen layanan Firestore menggunakan salah satu teknik berikut:
- Memigrasi project dengan memeriksa dan memperbarui izin bucket Cloud Storage (direkomendasikan).
- Menambahkan batasan kebijakan seluruh organisasi yang memengaruhi semua project dalam organisasi.
Teknik pertama lebih disukai karena melokalkan cakupan efek ke satu project mode Datastore. Teknik kedua tidak direkomendasikan karena tidak memigrasi izin bucket Cloud Storage yang sudah ada. Namun, teknik ini menyediakan kepatuhan keamanan di tingkat organisasi.
Memigrasi dengan memeriksa dan memperbarui izin bucket Cloud Storage
Proses migrasi ini terdiri dari dua langkah:
- Memperbarui izin bucket Cloud Storage. Lihat bagian berikut untuk mengetahui detailnya.
- Konfirmasi migrasi ke agen layanan Firestore.
Izin bucket agen layanan
Untuk operasi ekspor atau impor apa pun yang menggunakan bucket Cloud Storage di project lain, Anda harus memberikan izin kepada agen layanan Firestore untuk bucket tersebut. Misalnya, operasi yang memindahkan data ke project lain harus mengakses bucket dalam project lain tersebut. Jika tidak, operasi tersebut akan gagal setelah bermigrasi ke agen layanan Firestore.
Alur kerja impor dan ekspor yang tetap berada dalam project yang sama tidak memerlukan perubahan izin. Agen layanan Firestore dapat mengakses bucket dalam project yang sama secara default.
Perbarui izin bucket Cloud Storage dari project lain untuk memberikan akses ke agen layanan service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
. Berikan peran Firestore Service Agent
kepada agen layanan.
Peran Firestore Service Agent
memberikan izin baca dan tulis untuk bucket Cloud Storage. Jika Anda hanya perlu memberikan izin baca atau hanya tulis, gunakan peran khusus.
Proses migrasi yang dijelaskan di bagian berikut membantu Anda mengidentifikasi bucket Cloud Storage yang mungkin memerlukan pembaruan izin.
Memigrasi project ke Agen Layanan Firestore
Selesaikan langkah-langkah berikut untuk bermigrasi dari akun layanan App Engine ke agen layanan Firestore. Setelah selesai, migrasi tidak dapat dibatalkan.
-
Di konsol Google Cloud, buka halaman Databases.
- Pilih database yang diperlukan dari daftar database.
-
Di menu navigasi, klik Import/Export.
-
Jika project Anda belum dimigrasikan ke agen layanan Firestore, Anda akan melihat banner yang menjelaskan migrasi dan tombol Check Bucket Status. Langkah berikutnya membantu Anda mengidentifikasi dan memperbaiki kemungkinan kesalahan izin.
Klik Check Bucket Status.
Menu akan muncul dengan opsi untuk menyelesaikan migrasi Anda dan daftar bucket Cloud Storage. Proses pemuatan daftar mungkin akan memerlukan waktu beberapa saat.
Daftar ini mencakup bucket yang baru saja digunakan dalam operasi impor dan ekspor, tetapi saat ini tidak memberikan izin baca dan tulis kepada agen layanan mode Datastore.
- Catat nama utama agen layanan mode Datastore project Anda. Nama agen layanan muncul di bawah label Service agent to give access to.
-
Untuk bucket dalam daftar yang akan Anda gunakan untuk operasi impor atau ekspor mendatang, selesaikan langkah-langkah berikut:
-
Di baris tabel bucket ini, klik Fix. Halaman izin bucket akan terbuka di tab baru.
- Klik Tambahkan.
- Di kolom New principals, masukkan nama agen layanan Firestore Anda.
- Pada kolom Select a role, pilih Service Agents > Firestore Service Agent.
- Klik Simpan.
- Kembali ke tab pada halaman Import/Export mode Datastore.
- Ulangi langkah ini untuk bucket lain dalam daftar. Pastikan Anda melihat semua halaman pada daftar.
-
-
Klik Migrate to Firestore Service Agent. Jika masih memiliki bucket dengan pemeriksaan izin yang gagal, Anda harus mengonfirmasi migrasi dengan mengklik Migrate.
Pemberitahuan akan memberi tahu Anda saat migrasi selesai. Migrasi tidak dapat diurungkan.
Melihat status migrasi
Untuk memverifikasi status migrasi project Anda:
-
Di konsol Google Cloud, buka halaman Databases.
- Pilih database yang diperlukan dari daftar database.
-
Di menu navigasi, klik Import/Export.
-
Cari akun utama di samping label Import/Export jobs run as.
Jika akun utamanya adalah
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
, berarti project Anda telah dimigrasikan ke agen layanan Firestore. Migrasi tidak dapat diurungkan.Jika project belum dimigrasikan, banner akan muncul di bagian atas halaman dengan tombol Check Bucket Status. Lihat Memigrasi ke agen layanan Firestore untuk menyelesaikan migrasi.
Menambahkan batasan kebijakan di seluruh organisasi
-
Tetapkan batasan berikut dalam kebijakan organisasi Anda:
Require Firestore Service Agent for import/export (
firestore.requireP4SAforImportExport
).Batasan ini memerlukan operasi impor dan ekspor untuk menggunakan agen layanan Firestore guna mengizinkan permintaan. Untuk menetapkan batasan ini, lihat Membuat dan mengelola kebijakan organisasi .
Menerapkan batasan kebijakan organisasi ini tidak otomatis memberikan izin bucket Cloud Storage yang sesuai untuk agen layanan Firestore.
Jika batasan ini menimbulkan error izin untuk alur kerja impor atau ekspor, Anda dapat menonaktifkannya untuk kembali menggunakan akun layanan default. Setelah memeriksa dan memperbarui izin bucket Cloud Storage, Anda dapat mengaktifkan kembali batasan tersebut.