Halaman ini menjelaskan cara mengekspor database Spanner dengan konsolGoogle Cloud .
Untuk mengekspor database Spanner menggunakan REST API atau Google Cloud CLI, selesaikan langkah-langkah di bagian Sebelum memulai di halaman ini, lalu lihat petunjuk mendetail di Spanner ke Cloud Storage Avro dalam dokumentasi Dataflow. Proses ekspor menggunakan Dataflow dan menulis data ke folder di bucket Cloud Storage. Folder yang dihasilkan berisi serangkaian file Avro dan file manifes JSON.
Sebelum memulai
Untuk mengekspor database Spanner, Anda harus mengaktifkan Spanner, Cloud Storage, Compute Engine, dan Dataflow API terlebih dahulu:
Anda juga memerlukan kuota yang cukup dan izin IAM yang diperlukan.
Persyaratan kuota
Persyaratan kuota untuk tugas ekspor adalah sebagai berikut:
- Spanner: Tidak diperlukan kapasitas komputasi tambahan untuk mengekspor database, meskipun Anda mungkin perlu menambahkan kapasitas komputasi agar tugas Anda selesai dalam waktu yang wajar. Lihat Mengoptimalkan tugas untuk mengetahui detail selengkapnya.
- Cloud Storage: Untuk mengekspor, Anda harus membuat bucket untuk file yang diekspor jika Anda belum memilikinya. Anda dapat melakukannya di konsol, baik melalui halaman Cloud Storage maupun saat membuat ekspor melalui halaman Spanner. Google Cloud Anda tidak perlu menetapkan ukuran untuk bucket.
- Dataflow: Tugas ekspor tunduk pada CPU, penggunaan disk, dan kuota Compute Engine alamat IP yang sama dengan tugas Dataflow lainnya.
Compute Engine: Sebelum menjalankan tugas ekspor, Anda harus menyiapkan kuota awal untuk Compute Engine, yang digunakan Dataflow. Kuota ini mewakili jumlah maksimum resource yang Anda izinkan Dataflow untuk digunakan bagi tugas Anda. Nilai awal yang direkomendasikan adalah:
- CPU: 200
- Alamat IP yang sedang digunakan: 200
- Persistent disk standar: 50 TB
Umumnya, Anda tidak perlu melakukan penyesuaian lain. Dataflow menyediakan penskalaan otomatis sehingga Anda hanya membayar resource aktual yang digunakan selama ekspor. Jika tugas Anda dapat menggunakan lebih banyak resource, UI Dataflow akan menampilkan ikon peringatan. Tugas akan selesai meskipun ada ikon peringatan.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengekspor database, minta administrator untuk memberi Anda peran IAM berikut pada akun layanan worker Dataflow:
-
Cloud Spanner Viewer (
roles/spanner.viewer
) -
Dataflow Worker (
roles/dataflow.worker
) -
Storage Admin (
roles/storage.admin
) -
Pembaca Database Spanner (
roles/spanner.databaseReader
) -
Database Admin (
roles/spanner.databaseAdmin
)
Untuk menggunakan resource komputasi independen Spanner Data Boost selama ekspor,
Anda juga memerlukan izin IAM spanner.databases.useDataBoost
. Untuk mengetahui informasi selengkapnya, lihat
Ringkasan Data Boost.
Mengekspor database
Setelah memenuhi persyaratan kuota dan IAM yang dijelaskan sebelumnya, Anda dapat mengekspor database Spanner yang ada.
Untuk mengekspor database Spanner ke bucket Cloud Storage, ikuti langkah-langkah berikut:
Buka halaman Instances Spanner.
Klik nama instance yang berisi database Anda.
Klik item menu Impor/Ekspor di panel kiri, lalu klik tombol Ekspor.
Di bagian Pilih tempat untuk menyimpan ekspor Anda, klik Jelajahi.
Jika Anda belum memiliki bucket Cloud Storage untuk ekspor:
- Klik New bucket
.
- Masukkan nama untuk bucket Anda. Nama bucket harus unik di Cloud Storage.
- Pilih kelas penyimpanan dan lokasi default, lalu klik Buat.
- Klik bucket Anda untuk memilihnya.
Jika Anda sudah memiliki bucket, pilih bucket dari daftar awal atau klik Telusuri
untuk memfilter daftar, lalu klik bucket Anda untuk memilihnya.
- Klik New bucket
Klik Pilih.
Pilih database yang ingin Anda ekspor di menu drop-down Pilih database yang akan diekspor.
Opsional: Untuk mengekspor database Anda dari titik waktu sebelumnya, centang kotak dan masukkan stempel waktu.
Pilih region di menu drop-down Pilih region untuk tugas ekspor.
Opsional: Untuk mengenkripsi status pipeline Dataflow dengan kunci enkripsi yang dikelola pelanggan:
- Klik Tampilkan opsi enkripsi.
- Pilih Gunakan kunci enkripsi yang dikelola pelanggan (CMEK).
- Pilih kunci Anda dari menu drop-down.
Opsi ini tidak memengaruhi enkripsi tingkat bucket Cloud Storage tujuan. Untuk mengaktifkan CMEK bagi bucket Cloud Storage Anda, lihat Menggunakan CMEK dengan Cloud Storage.
Opsional: Untuk mengekspor menggunakan Spanner Data Boost, centang kotak Gunakan Spanner Data Boost. Untuk mengetahui informasi selengkapnya, lihat Ringkasan Data Boost.
Centang kotak di bagian Konfirmasi biaya untuk mengonfirmasi bahwa ada biaya selain yang ditanggung oleh instance Spanner yang ada.
Klik Ekspor.
Konsol Google Cloud menampilkan halaman Database Import/Export, yang kini menampilkan item baris untuk tugas ekspor Anda dalam daftar tugas Import/Export, termasuk waktu yang telah berlalu untuk tugas tersebut:
Saat tugas selesai atau dihentikan, status akan diperbarui dalam daftar Impor/Ekspor. Jika tugas berhasil, status Berhasil akan ditampilkan:
Jika tugas gagal, status Gagal akan ditampilkan:
Untuk melihat detail operasi Dataflow untuk tugas Anda, klik nama tugas di kolom Nama tugas Dataflow.
Jika tugas Anda gagal, periksa log Dataflow tugas untuk mengetahui detail error.
Untuk menghindari biaya Cloud Storage untuk file yang dibuat oleh tugas ekspor yang gagal, hapus folder dan filenya. Lihat Melihat ekspor Anda untuk mengetahui informasi tentang cara menemukan folder.
Catatan tentang mengekspor kolom yang dibuat dan aliran perubahan
Nilai dalam kolom yang dihasilkan yang disimpan tidak diekspor. Definisi kolom diekspor ke skema Avro sebagai kolom rekaman jenis null, dengan definisi kolom sebagai properti kustom kolom. Hingga operasi pengisian ulang kolom turunan yang baru ditambahkan selesai, kolom turunan diabaikan seolah-olah tidak ada dalam skema.
Aliran perubahan yang diekspor sebagai file Avro hanya berisi skema aliran perubahan, dan bukan catatan perubahan data.
Catatan tentang mengekspor urutan
Urutan (GoogleSQL,
PostgreSQL)
adalah objek skema yang Anda gunakan untuk menghasilkan nilai bilangan bulat unik.
Spanner mengekspor setiap objek skema ke skema Avro sebagai kolom
rekaman, dengan jenis urutan, rentang yang dilewati, dan penghitung sebagai properti
kolom. Perhatikan bahwa untuk mencegah urutan direset dan menghasilkan
nilai duplikat setelah impor, selama ekspor skema, fungsi
GET_INTERNAL_SEQUENCE_STATE()
(GoogleSQL,
PostgreSQL)
mencatat penghitung urutan. Spanner menambahkan buffer
1000 ke penghitung, dan menulis nilai penghitung baru ke kolom catatan. Pendekatan ini menghindari error nilai duplikat yang mungkin terjadi setelah impor.
Jika ada lebih banyak penulisan ke database sumber selama ekspor data, Anda harus menyesuaikan penghitung urutan sebenarnya menggunakan pernyataan ALTER SEQUENCE
(GoogleSQL,
PostgreSQL).
Saat diimpor, urutan dimulai dari penghitung baru ini, bukan penghitung yang ditemukan dalam skema. Atau, Anda dapat menggunakan pernyataan ALTER SEQUENCE
(GoogleSQL,
PostgreSQL)
untuk memperbarui urutan dengan penghitung baru.
Melihat ekspor Anda di Cloud Storage
Untuk melihat folder yang berisi database yang diekspor di Google Cloud konsol, buka browser Cloud Storage dan pilih bucket yang Anda pilih sebelumnya:
Bucket kini berisi folder dengan database yang diekspor di dalamnya. Nama folder diawali dengan ID instance, nama database, dan stempel waktu tugas ekspor Anda. Folder ini berisi:
- File
spanner-export.json
- File
TableName-manifest.json
untuk setiap tabel dalam database yang Anda ekspor. Satu atau beberapa file
TableName.avro-#####-of-#####
. Angka pertama dalam ekstensi.avro-#####-of-#####
mewakili indeks file Avro, dimulai dari nol, dan angka kedua mewakili jumlah file Avro yang dibuat untuk setiap tabel.Misalnya,
Songs.avro-00001-of-00002
adalah file kedua dari dua file yang berisi data untuk tabelSongs
.File
ChangeStreamName-manifest.json
untuk setiap aliran perubahan dalam database yang Anda ekspor.File
ChangeStreamName.avro-00000-of-00001
untuk setiap aliran perubahan. File ini berisi data kosong dengan hanya skema Avro dari aliran perubahan.
Pilih region untuk tugas impor Anda
Anda mungkin ingin memilih region lain berdasarkan lokasi bucket Cloud Storage Anda. Untuk menghindari biaya transfer data keluar, pilih region yang cocok dengan lokasi bucket Cloud Storage Anda.
Jika lokasi bucket Cloud Storage Anda adalah region, Anda dapat memanfaatkan penggunaan jaringan gratis dengan memilih region yang sama untuk tugas impor, dengan asumsi region tersebut tersedia.
Jika lokasi bucket Cloud Storage Anda adalah region ganda, Anda dapat memanfaatkan penggunaan jaringan gratis dengan memilih salah satu dari dua region yang membentuk region ganda untuk tugas impor Anda, dengan asumsi salah satu region tersedia.
- Jika region yang ditempatkan bersama tidak tersedia untuk tugas impor Anda, atau jika lokasi bucket Cloud Storage Anda adalah multi-region, biaya transfer data keluar akan berlaku. Lihat harga transfer data Cloud Storage untuk memilih region yang menimbulkan biaya transfer data terendah.
Mengekspor subset tabel
Jika Anda hanya ingin mengekspor data dari tabel tertentu, dan bukan seluruh database, Anda dapat menentukan tabel tersebut selama ekspor. Dalam kasus ini, Spanner mengekspor seluruh skema database, termasuk data tabel yang Anda tentukan, dan membiarkan semua tabel lain ada tetapi kosong dalam file yang diekspor.
Anda dapat menentukan subset tabel yang akan diekspor menggunakan halaman Dataflow di konsol Google Cloud atau gcloud CLI. (Halaman Spanner tidak menyediakan tindakan ini.)
Jika Anda mengekspor data tabel yang merupakan turunan dari tabel lain, Anda juga harus mengekspor data tabel induknya. Jika induk tidak diekspor, tugas ekspor akan gagal.
Untuk mengekspor subset tabel, mulai ekspor menggunakan template Spanner ke Cloud Storage Avro Dataflow, dan tentukan tabel menggunakan halaman Dataflow di konsol Google Cloud atau menggunakan gcloud CLI, seperti yang dijelaskan:
Konsol
Jika Anda menggunakan halaman Dataflow di konsol Google Cloud , parameter Nama tabel Cloud Spanner terletak di bagian Parameter opsional pada halaman Buat tugas dari template. Beberapa tabel dapat ditentukan dalam format yang dipisahkan koma.
gcloud
Jalankan perintah gcloud dataflow jobs run
, dan tentukan argumen tableNames
. Contoh:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=table1,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Menentukan beberapa tabel di gcloud memerlukan
penggantian argumen jenis kamus.
Contoh berikut menggunakan '|
' sebagai karakter escape:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='^|^instanceId=test-instance|databaseId=example-db|tableNames=table1,table2|outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Parameter shouldExportRelatedTables
adalah opsi praktis untuk
mengekspor semua tabel induk
dari tabel yang dipilih secara otomatis. Misalnya, dalam hierarki skema ini
dengan tabel Singers
, Albums
, dan Songs
, Anda hanya perlu menentukan
Songs
. Opsi shouldExportRelatedTables
juga akan mengekspor Singers
dan Albums
karena Songs
adalah turunan dari keduanya.
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=Songs,shouldExportRelatedTables=true,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Melihat atau memecahkan masalah tugas di UI Dataflow
Setelah memulai tugas ekspor, Anda dapat melihat detail tugas, termasuk log, di bagian Dataflow pada konsol Google Cloud .
Melihat detail tugas Dataflow
Untuk melihat detail tugas impor atau ekspor yang Anda jalankan dalam seminggu terakhir, termasuk tugas yang sedang berjalan:
- Buka halaman Ringkasan database untuk database.
- Klik item menu panel kiri Impor/Ekspor. Halaman Import/Export database menampilkan daftar tugas terbaru.
Di halaman Import/Export database, klik nama tugas di kolom Dataflow job name:
Konsol Google Cloud menampilkan detail tugas Dataflow.
Untuk melihat tugas yang Anda jalankan lebih dari satu minggu yang lalu:
Buka halaman tugas Dataflow di konsol Google Cloud .
Temukan tugas Anda dalam daftar, lalu klik namanya.
Konsol Google Cloud menampilkan detail tugas Dataflow.
Melihat log Dataflow untuk tugas Anda
Untuk melihat log tugas Dataflow, buka halaman detail tugas, lalu klik Log di sebelah kanan nama tugas.
Jika tugas gagal, cari error di log. Jika ada error, jumlah error akan ditampilkan di samping Log:
Untuk melihat error tugas:
Klik jumlah error di samping Log.
Konsol Google Cloud menampilkan log tugas. Anda mungkin perlu men-scroll untuk melihat error.
Temukan entri dengan ikon error
.
Klik setiap entri log untuk meluaskan isinya.
Untuk mengetahui informasi selengkapnya tentang cara memecahkan masalah tugas Dataflow, lihat Memecahkan masalah pipeline.
Memecahkan masalah tugas ekspor yang gagal
Jika Anda melihat error berikut di log tugas:
com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found --or-- com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.
Periksa Latensi baca 99% di tab Monitoring database Spanner Anda di konsolGoogle Cloud . Jika menunjukkan nilai yang tinggi (beberapa detik), berarti instance kelebihan beban, sehingga operasi baca akan mengalami waktu tunggu habis dan gagal.
Salah satu penyebab latensi tinggi adalah tugas Dataflow berjalan menggunakan terlalu banyak pekerja, sehingga memberikan terlalu banyak beban pada instance Spanner.
Untuk menentukan batas jumlah pekerja Dataflow, alih-alih menggunakan tab Impor/Ekspor di halaman detail instance database Spanner Anda di konsol Google Cloud , Anda harus memulai ekspor menggunakan template Spanner ke Cloud Storage Avro Dataflow dan menentukan jumlah maksimum pekerja seperti yang dijelaskan:Konsol
Jika Anda menggunakan konsol Dataflow, parameter Pekerja maks berada di bagian Parameter opsional pada halaman Buat tugas dari template.
gcloud
Jalankan perintah gcloud dataflow jobs run
dan tentukan argumen max-workers
. Contoh:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Memecahkan masalah error jaringan
Error berikut mungkin terjadi saat Anda mengekspor database Spanner:
Workflow failed. Causes: Error: Message: Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface must specify a subnet if the network resource is in custom subnet mode. HTTP Code: 400
Error ini terjadi karena Spanner mengasumsikan bahwa Anda bermaksud menggunakan
jaringan VPC mode otomatis bernama default
dalam project yang sama dengan
job Dataflow. Jika Anda tidak memiliki jaringan VPC default di project, atau jika jaringan VPC Anda berada di jaringan VPC mode kustom, Anda harus membuat tugas Dataflow dan menentukan jaringan atau subnetwork alternatif.
Mengoptimalkan tugas ekspor yang berjalan lambat
Jika telah mengikuti saran di setelan awal, Anda umumnya tidak perlu melakukan penyesuaian lain. Jika tugas Anda berjalan lambat, ada beberapa pengoptimalan lain yang dapat Anda coba:
Mengoptimalkan lokasi tugas dan data: Jalankan tugas Dataflow di region yang sama dengan lokasi instance Spanner dan bucket Cloud Storage Anda.
Pastikan resource Dataflow mencukupi: Jika kuota Compute Engine yang relevan membatasi resource tugas Dataflow Anda, halaman Dataflow tugas di Google Cloud konsol akan menampilkan ikon peringatan
dan pesan log:
Dalam situasi ini, meningkatkan kuota untuk CPU, alamat IP yang sedang digunakan, dan persistent disk standar dapat memperpendek waktu proses tugas, tetapi Anda mungkin dikenai lebih banyak biaya Compute Engine.
Periksa pemakaian CPU Spanner: Jika Anda melihat bahwa pemakaian CPU untuk instance melebihi 65%, Anda dapat meningkatkan kapasitas komputasi di instance tersebut. Kapasitas akan menambahkan lebih banyak resource Spanner dan tugas akan berjalan lebih cepat, tetapi Anda akan dikenai lebih banyak biaya Spanner.
Faktor yang memengaruhi performa tugas ekspor
Beberapa faktor memengaruhi waktu yang diperlukan untuk menyelesaikan tugas ekspor.
Ukuran database Spanner: Memproses lebih banyak data memerlukan lebih banyak waktu dan resource.
Skema database Spanner, termasuk:
- Jumlah tabel
- Ukuran baris
- Jumlah indeks sekunder
- Jumlah kunci asing
- Jumlah aliran data perubahan
Lokasi data: Data ditransfer antara Spanner dan Cloud Storage menggunakan Dataflow. Idealnya, ketiga komponen tersebut berada di region yang sama. Jika komponen tidak berada di region yang sama, pemindahan data antar-region akan memperlambat tugas.
Jumlah worker Dataflow: Worker Dataflow yang optimal diperlukan untuk performa yang baik. Dengan menggunakan penskalaan otomatis, Dataflow memilih jumlah pekerja untuk tugas bergantung pada jumlah pekerjaan yang perlu dilakukan. Namun, jumlah pekerja akan dibatasi oleh kuota untuk CPU, alamat IP yang sedang digunakan, dan persistent disk standar. UI Dataflow menampilkan ikon peringatan jika menemukan batas kuota. Dalam situasi ini, progres lebih lambat, tetapi tugas akan tetap selesai.
Beban yang ada di Spanner: Tugas ekspor biasanya menambahkan beban ringan pada instance Spanner. Jika instance sudah memiliki beban yang cukup besar, tugas akan berjalan lebih lambat.
Jumlah kapasitas komputasi Spanner: Jika penggunaan CPU untuk instance lebih dari 65%, maka tugas akan berjalan lebih lambat.