Halaman ini menjelaskan cara mengekspor dan mengimpor Firestore dalam entity 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 dari penghapusan yang tidak disengaja dan mengekspor data untuk pemrosesan offline. Anda dapat mengekspor semua entity atau hanya jenis entity tertentu. Demikian pula, Anda dapat mengimpor semua data atau hanya jenis tertentu dari suatu ekspor. Saat Anda menggunakan layanan ekspor dan impor terkelola, pertimbangkan hal-hal berikut:
Layanan ekspor menggunakan pembacaan yang pada akhirnya konsisten. Anda tidak dapat berasumsi bahwa ekspor terjadi pada satu waktu. Ekspor dapat mencakup 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 entitas. Impor menggunakan ID yang ada pada saat ekspor dan menimpa entity yang ada dengan ID yang sama. Selama impor, ID dicadangkan selama entity diimpor. Fitur ini mencegah konflik ID dengan entity baru jika penulisan diaktifkan saat impor sedang berjalan.
Jika entity dalam database Anda tidak terpengaruh oleh impor, entity tersebut akan tetap berada di database setelah impor selesai.
Data yang diekspor dari satu database mode Datastore dapat diimpor ke dalam database mode Datastore lain, bahkan satu di project lain.
Layanan ekspor dan impor terkelola membatasi jumlah ekspor dan impor serentak maksimal 50, serta memungkinkan maksimum 20 permintaan ekspor dan impor per menit untuk sebuah project. Untuk setiap permintaan, layanan membatasi jumlah kombinasi filter entitas hingga 100.
Output ekspor yang dikelola menggunakan format log LevelDB.
Untuk mengimpor hanya sebagian entity atau untuk 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
, konten 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 Anda yang memberikan izin
datastore.databases.export
, jika Anda mengekspor data, atau izindatastore.databases.import
, jika Anda mengimpor data. PeranDatastore Import Export Admin
, misalnya, memberikan kedua izin.Jika bucket Cloud Storage berada dalam project lain, berikan agen layanan Firestore akses ke bucket.
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 Anda 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 untuk Identity and Access Management.
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, berarti akun Anda memiliki izin yang diperlukan. Jika tidak, peran IAM berikut
akan memberikan izin yang diperlukan:
- Pemilik Datastore
- Admin Ekspor Impor Datastore
Anda juga dapat menetapkan izin ini dengan peran khusus.
Pemilik project dapat memberikan salah satu peran tersebut dengan mengikuti langkah-langkah di bagian Memberikan 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 agen layanan lebih lanjut, lihat Agen layanan.
Agen layanan Firestore memerlukan akses ke bucket Cloud Storage yang digunakan dalam operasi ekspor atau impor. Jika bucket Cloud Storage Anda 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 Anda, 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.
Lihat nama agen layanan
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 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 dalam project lain, ubah izin bucket untuk menetapkan salah satu peran Identity and Access Management berikut ke agen layanan mode Datastore dari 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 pada 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 dari project yang berisi database mode Datastore Anda:
- Storage Admin
- Storage Object Viewer dan Pembaca Bucket Lama Penyimpanan
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. Pemberitahuan akan 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 lainnya. Jika Anda tidak memberikan awalan file, layanan ekspor terkelola akan membuatnya berdasarkan waktu saat ini.
Gunakan flag [--async
][async-flag] untuk mencegah gcloud
menunggu
operasi selesai. Jika menghapus flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan flag --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 entitas, dengan setiap kombinasi jenis yang difilter dan namespace dihitung sebagai filter terpisah terhadap batas ini.
Konsol
Di konsol, Anda dapat memilih semua jenis atau satu jenis tertentu. Anda juga 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.Pada Tujuan, masukkan nama bucket Cloud Storage.
Klik Ekspor.
Konsol akan kembali ke halaman Import/Export. Pemberitahuan akan 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 lainnya. Jika Anda tidak memberikan awalan file, layanan ekspor terkelola akan membuatnya berdasarkan waktu saat ini.
Gunakan flag [--async
][async-flag] untuk mencegah gcloud
menunggu
operasi selesai. Jika menghapus flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan flag --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 file ekspor yang ada di dalamnya:
protoc --decode_raw < export0.export_metadata
Mengimpor semua entitas
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 Cari, lalu pilih file.overall_export_metadata
.Pastikan bahwa 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. Pemberitahuan akan 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 menghapus 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
Anda dapat menentukan nilai yang akan digunakan untuk lokasi impor dengan menggunakan browser Cloud Storage di Konsol Google Cloud:
Anda juga dapat mencantumkan dan menjelaskan 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 subset jenis dan namespace dari ekspor semua entity.
Konsol
Di konsol, Anda dapat memilih semua jenis atau satu jenis tertentu. Anda juga dapat memilih semua namespace atau satu namespace tertentu.
Untuk menentukan daftar namespace dan jenis yang akan diimpor, gunakan gcloud
sebagai gantinya.
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 Cari, lalu pilih file.overall_export_metadata
.Pastikan Anda mengimpor file
.overall_export_metadata
, bukan file.export_metadata
.Tetapkan kolom Namespace ke
All Namespaces
atau namespace tertentu.Tetapkan kolom Kind ke
All Kinds
atau jenis tertentu.Klik Import.
Konsol akan kembali ke halaman Import/Export. Pemberitahuan akan 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 menghapus flag --async
, Anda dapat mengetik
Ctrl+c
untuk berhenti menunggu operasi. Tindakan ini tidak akan membatalkan operasi.
Tetapkan flag --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 entitas 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 entitas][jenis ekspor] 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 menit utuh 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 dalam bagian Mengimpor semua entity untuk mengimpor database yang diekspor. Jika ada entity yang sudah ada di database Anda, entity tersebut akan ditimpa. [Mengimpor subset jenis dan/atau namespace tertentu dengan filter entitas][jenis impor] juga didukung.
Mengimpor transformasi
Saat mengimpor entity dari project lain, perlu diingat bahwa kunci entity menyertakan project ID. Operasi impor akan memperbarui kunci entity dan properti referensi utama dalam data impor dengan project ID dari 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 error tersebut, impor ke project tujuan dengan ID project yang lebih pendek. Hal ini tidak memengaruhi operasi impor dengan data dari project yang sama.
Mengelola operasi yang berjalan lama
Operasi impor dan ekspor terkelola merupakan operasi yang berjalan lama. Panggilan metode ini dapat memerlukan waktu lama untuk diselesaikan.
Setelah Anda memulai operasi ekspor atau impor, mode Datastore menetapkan nama yang 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 pada 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 menampilkan daftar 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 responsnya di bawah ini.
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 pada 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 tergantung 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 Google Cloud Console.
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 penetapan 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:
- Pembacaan dan penulisan entity yang dilakukan menurut operasi ekspor dan impor mengurangi biaya Firestore dalam mode Datastore Anda. 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 notifikasi anggaran Google Cloud sampai operasi selesai. Demikian pula, pembacaan dan penulisan 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 cadangan Admin Datastore
Jika sebelumnya Anda menggunakan konsol Admin Datastore untuk pencadangan, Anda harus memperhatikan perbedaan berikut:
Ekspor yang dibuat oleh ekspor terkelola tidak akan muncul di konsol Admin Datastore. Ekspor dan impor terkelola adalah layanan baru yang tidak berbagi data dengan fitur pencadangan dan pemulihan App Engine, yang dikelola melalui Konsol Google Cloud.
Layanan ekspor dan impor terkelola tidak mendukung metadata yang sama seperti cadangan Admin Datastore dan tidak menyimpan status progres di database Anda. Untuk informasi mengenai pemeriksaan 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. Anda dapat mengimpor file cadangan Admin Datastore menggunakan layanan impor terkelola, tetapi tidak dapat mengimpor output ekspor terkelola menggunakan konsol Admin Datastore.
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 ingin mengimpor data ke BigQuery, permintaan ekspor Anda harus menyertakan satu atau beberapa nama jenis di 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 akan menjadi kolom skema.
Jika skema BigQuery suatu jenis melebihi 10.000 kolom, operasi ekspor akan berupaya agar tidak melebihi batas kolom dengan memperlakukan entity yang disematkan sebagai blob. Jika konversi ini membuat 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 melebihi 10.000,operasi ekspor tidak akan 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 menggunakan 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
Sebelumnya Firestore 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 agar 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 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 tunggal. 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.
- Mengonfirmasi 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 Save.
- 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 untuk 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.