Mengimpor file Spanner Avro

Halaman ini menjelaskan cara mengimpor database Spanner ke Spanner menggunakan Google Cloud Console. Untuk mengimpor file Avro dari sumber lain, lihat Mengimpor data dari database non-Spanner.

Proses ini menggunakan Dataflow; proses ini mengimpor data dari folder bucket Cloud Storage yang berisi kumpulan file Avro dan file manifes JSON. Proses impor hanya mendukung file Avro yang diekspor dari Spanner.

Untuk mengimpor database Spanner menggunakan REST API atau gcloud CLI, selesaikan langkah-langkah di bagian Sebelum memulai di halaman ini, lalu lihat petunjuk mendetail di Cloud Storage Avro ke Spanner.

Sebelum memulai

Untuk mengimpor database Spanner, Anda harus mengaktifkan Spanner, Cloud Storage, Compute Engine, dan Dataflow API terlebih dahulu:

Enable the APIs

Anda juga memerlukan kuota yang cukup dan izin IAM yang diperlukan.

Persyaratan kuota

Persyaratan kuota untuk tugas impor adalah sebagai berikut:

  • Spanner: Anda harus memiliki kapasitas komputasi yang cukup untuk mendukung jumlah data yang diimpor. Tidak ada kapasitas komputasi tambahan yang diperlukan untuk mengimpor database, meskipun Anda mungkin perlu menambahkan kapasitas komputasi tambahan agar tugas Anda selesai dalam waktu yang wajar. Lihat Mengoptimalkan tugas untuk mengetahui detail selengkapnya.
  • Cloud Storage: Untuk mengimpor, Anda harus memiliki bucket berisi file yang diekspor sebelumnya. Anda tidak perlu menetapkan ukuran bucket.
  • Dataflow: Tugas impor tunduk pada CPU, penggunaan disk, dan alamat IP kuota Compute Engine yang sama dengan tugas Dataflow lainnya.
  • Compute Engine: Sebelum menjalankan tugas impor, Anda harus menyiapkan kuota awal untuk Compute Engine, yang digunakan Dataflow. Kuota ini menunjukkan jumlah maksimum resource yang Anda izinkan untuk digunakan Dataflow untuk 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 lainnya. Dataflow menyediakan penskalaan otomatis sehingga Anda hanya membayar resource sebenarnya yang digunakan selama impor. Jika tugas Anda dapat menggunakan lebih banyak resource, UI Dataflow akan menampilkan ikon peringatan. Tugas akan selesai meskipun ada ikon peringatan.

Persyaratan IAM

Untuk mengimpor database, Anda juga harus memiliki peran IAM dengan izin yang memadai untuk menggunakan semua layanan yang terlibat dalam tugas impor. Untuk mengetahui informasi tentang cara memberikan peran dan izin, lihat Menerapkan peran IAM.

Untuk mengimpor database, Anda memerlukan peran berikut:

Opsional: Temukan folder database Anda di Cloud Storage

Untuk menemukan folder yang berisi database yang diekspor di Konsol Google Cloud, buka browser Cloud Storage dan klik bucket yang berisi folder yang diekspor.

Buka browser Cloud Storage

Nama folder yang berisi data yang diekspor dimulai 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, yang dimulai dari nol, dan angka kedua menunjukkan jumlah file Avro yang dihasilkan untuk setiap tabel.

    Misalnya, Songs.avro-00001-of-00002 adalah file kedua dari dua file yang berisi data untuk tabel Songs.

  • 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 yang hanya berisi skema Avro dari aliran data perubahan.

Mengimpor database

Untuk mengimpor database Spanner dari Cloud Storage ke instance, ikuti langkah-langkah berikut.

  1. Buka halaman Instance Spanner.

    Buka halaman instance

  2. Klik nama instance yang akan berisi database yang diimpor.

  3. Klik item menu Import/Export di panel kiri, lalu klik tombol Import.

  4. Di bagian Choose a source folder, klik Browse.

  5. Temukan bucket yang berisi ekspor Anda di daftar awal, atau klik Telusuri Screenshot elemen UI penelusuran untuk memfilter daftar dan menemukan bucket tersebut. Klik dua kali pada bucket untuk melihat folder di dalamnya.

  6. Cari folder yang berisi file yang diekspor, lalu klik untuk memilihnya.

  7. Klik Pilih.

  8. Masukkan nama untuk database baru, yang dibuat Spanner selama proses impor. Nama database tidak boleh ada dalam instance Anda.

  9. Pilih dialek untuk database baru (GoogleSQL atau PostgreSQL).

  10. (Opsional) Untuk melindungi database baru dengan kunci enkripsi yang dikelola pelanggan, klik Tampilkan opsi enkripsi, lalu pilih Gunakan kunci enkripsi yang dikelola pelanggan (CMEK). Kemudian, pilih kunci dari menu {i>drop-down<i}.

  11. Pilih wilayah di menu drop-down Pilih wilayah untuk tugas impor.

  12. (Opsional) Untuk mengenkripsi status pipeline Dataflow dengan kunci enkripsi yang dikelola pelanggan, klik Show encryption options dan pilih Use a customer-managed encryption key (CMEK). Kemudian, pilih kunci dari menu {i>drop-down<i}.

  13. Pilih kotak centang di bagian Konfirmasi tagihan untuk mengonfirmasi bahwa ada tagihan selain yang dikenakan oleh instance Spanner yang ada.

  14. Klik Import.

    Konsol Google Cloud menampilkan halaman Database details, yang kini menampilkan kotak yang mendeskripsikan tugas impor, termasuk waktu berlalu tugas:

    Screenshot tugas yang sedang berlangsung

Setelah tugas selesai atau dihentikan, Google Cloud Console akan menampilkan pesan di halaman Database details. Jika pekerjaan berhasil, pesan sukses akan muncul:

Pesan impor tugas berhasil

Jika tugas tidak berhasil, pesan kegagalan akan muncul:

Pesan kegagalan tugas impor

Jika tugas Anda gagal, periksa log Dataflow tugas untuk mengetahui detail error dan lihat Memecahkan masalah tugas impor yang gagal.

Catatan tentang pengimporan kolom dan aliran perubahan yang dibuat

Spanner menggunakan definisi setiap kolom yang dihasilkan dalam skema Avro untuk membuat ulang kolom tersebut. Spanner menghitung nilai kolom yang dihasilkan secara otomatis selama impor.

Demikian pula, Spanner menggunakan definisi setiap aliran perubahan dalam skema Avro untuk membuatnya kembali selama impor. Data aliran data perubahan tidak akan diekspor atau diimpor melalui Avro, sehingga semua aliran data perubahan yang terkait dengan database yang baru diimpor tidak akan memiliki kumpulan data perubahan.

Catatan tentang pengimporan urutan

Setiap urutan (GoogleSQL, PostgreSQL) yang diekspor Spanner menggunakan fungsi GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) untuk mencatat statusnya saat ini. Spanner menambahkan buffer 1.000 ke penghitung, dan menulis nilai penghitung baru ke properti kolom kumpulan data. Perhatikan bahwa ini hanyalah pendekatan terbaik untuk menghindari error nilai duplikat yang mungkin terjadi setelah impor. Sesuaikan penghitung urutan yang sebenarnya jika ada lebih banyak penulisan ke database sumber selama ekspor data.

Saat mengimpor, urutan dimulai dari penghitung baru ini, bukan penghitung yang ditemukan dalam skema. Jika perlu, Anda dapat menggunakan pernyataan ALTER SEQUENCE (GoogleSQL, PostgreSQL) untuk mengupdate ke penghitung baru.

Pilih region untuk tugas impor Anda

Sebaiknya pilih region yang berbeda berdasarkan lokasi bucket Cloud Storage. Untuk menghindari biaya transfer data keluar, pilih region yang cocok dengan lokasi bucket Cloud Storage Anda.

  • Jika lokasi bucket Cloud Storage adalah region, Anda dapat memanfaatkan penggunaan jaringan gratis dengan memilih region yang sama untuk tugas impor, dengan asumsi bahwa region tersebut tersedia.

  • Jika lokasi bucket Cloud Storage Anda adalah dual-region, Anda dapat memanfaatkan penggunaan jaringan gratis dengan memilih salah satu dari dua region yang membentuk region ganda untuk tugas impor, 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 dikenai biaya transfer data terendah.

Melihat atau memecahkan masalah tugas di UI Dataflow

Setelah memulai tugas impor, Anda dapat melihat detail tugas tersebut, termasuk log, di bagian Dataflow pada Konsol Google Cloud.

Melihat detail tugas Dataflow

Untuk melihat detail tugas impor/ekspor yang Anda jalankan dalam seminggu terakhir, termasuk tugas yang sedang berjalan:

  1. Buka halaman Database overview untuk database tersebut.
  2. Klik item menu panel kiri Import/Export. Halaman Import/Export database menampilkan daftar tugas terbaru.
  3. Di halaman Import/Export database, klik nama tugas di kolom Dataflow job name:

    Pesan status tugas dalam proses

    Konsol Google Cloud menampilkan detail tugas Dataflow.

Untuk melihat tugas yang Anda jalankan lebih dari satu minggu yang lalu:

  1. Buka halaman tugas Dataflow di konsol Google Cloud.

    Buka halaman lowongan

  2. Temukan pekerjaan Anda di 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 seperti yang dijelaskan di atas, lalu klik Logs di sebelah kanan nama tugas.

Jika tugas gagal, cari error di log. Jika ada error, jumlah error akan ditampilkan di samping Logs:

Contoh jumlah error di samping tombol Log

Untuk melihat error tugas:

  1. Klik jumlah error di sebelah Logs.

    Konsol Google Cloud menampilkan log tugas. Anda mungkin perlu men-scroll untuk melihat error.

  2. Temukan entri dengan ikon error Ikon Error.

  3. Klik entri log individual untuk meluaskan kontennya.

Untuk mengetahui informasi selengkapnya tentang memecahkan masalah tugas Dataflow, lihat Memecahkan masalah pipeline Anda.

Memecahkan masalah tugas impor 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 99% latensi Tulis di tab Monitoring pada database Spanner Anda di Google Cloud Console. Jika instance menampilkan nilai tinggi (beberapa detik), hal ini menunjukkan bahwa instance kelebihan beban, yang menyebabkan waktu tunggu habis dan gagal.

Salah satu penyebab latensi tinggi adalah tugas Dataflow yang berjalan menggunakan terlalu banyak pekerja, sehingga menempatkan terlalu banyak beban pada instance Spanner.

Untuk menentukan batas jumlah pekerja Dataflow, daripada menggunakan tab Import/Export di halaman detail instance database Spanner di Google Cloud Console, Anda harus memulai impor menggunakan Dataflow template Cloud Storage Avro ke Cloud Spanner dan menentukan jumlah pekerja maksimum seperti yang dijelaskan di bawah:
  • Jika Anda menggunakan konsol Dataflow, parameter Max worker terletak di bagian Parameter opsional di halaman Create job from template.

  • Jika Anda menggunakan gcloud, tentukan argumen max-workers. Contoh:

    gcloud dataflow jobs run my-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Mengoptimalkan tugas impor yang berjalan lambat

Jika telah mengikuti saran di setelan awal, biasanya Anda tidak perlu melakukan penyesuaian lainnya. Jika tugas Anda berjalan lambat, ada beberapa pengoptimalan lain yang dapat Anda coba:

  • Mengoptimalkan tugas dan lokasi data: Jalankan tugas Dataflow di region yang sama tempat instance Spanner dan bucket Cloud Storage berada.

  • Pastikan resource Dataflow yang memadai: Jika kuota Compute Engine yang relevan membatasi resource tugas Dataflow Anda, halaman Dataflow tugas di Konsol Google Cloud akan menampilkan ikon peringatan Ikon peringatan dan pesan log:

    Screenshot peringatan batas kuota

    Dalam situasi ini, meningkatkan kuota CPU, alamat IP yang sedang digunakan, dan persistent disk standar dapat mempersingkat waktu proses tugas, tetapi Anda mungkin dikenai lebih banyak biaya Compute Engine.

  • Periksa pemakaian CPU Spanner: Jika pemakaian CPU untuk instance melebihi 65%, Anda dapat meningkatkan kapasitas komputasi dalam instance tersebut. Kapasitas tersebut menambahkan lebih banyak resource Spanner dan tugas akan dipercepat, tetapi biaya Spanner Anda akan lebih besar.

Faktor yang memengaruhi performa tugas impor

Beberapa faktor memengaruhi waktu yang diperlukan untuk menyelesaikan tugas impor.

  • Ukuran database Spanner: Pemrosesan data yang lebih banyak memerlukan lebih banyak waktu dan resource.

  • Skema database Spanner, termasuk:

    • Jumlah tabel
    • Ukuran baris
    • Jumlah indeks sekunder
    • Jumlah {i>foreign key<i}
    • Jumlah aliran perubahan

Perhatikan bahwa pembuatan indeks dan kunci asing akan berlanjut setelah tugas impor Dataflow selesai. Aliran data perubahan dibuat sebelum tugas impor selesai, tetapi setelah semua data diimpor.

  • 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, memindahkan data lintas region akan memperlambat tugas.

  • Jumlah pekerja Dataflow: Pekerja Dataflow yang optimal diperlukan untuk mendapatkan performa yang baik. Dengan menggunakan penskalaan otomatis, Dataflow akan memilih jumlah pekerja untuk tugas, bergantung pada jumlah pekerjaan yang perlu dilakukan. Namun, jumlah pekerja akan dibatasi oleh kuota CPU, alamat IP yang sedang digunakan, dan persistent disk standar. UI Dataflow menampilkan ikon peringatan jika mengalami batas kuota. Dalam situasi ini, progresnya lebih lambat, tetapi tugas seharusnya tetap dapat diselesaikan. Penskalaan otomatis dapat membebani Spanner sehingga menyebabkan error jika ada banyak data yang harus diimpor.

  • Pemuatan yang ada di Spanner: Tugas impor menambahkan beban CPU yang signifikan pada instance Spanner. Jika instance sudah memiliki beban yang cukup substansial, tugas akan berjalan lebih lambat.

  • Jumlah kapasitas komputasi Spanner: Jika penggunaan CPU untuk instance lebih dari 65%, tugas akan berjalan lebih lambat.

Menyesuaikan pekerja untuk performa impor yang baik

Saat memulai tugas impor Spanner, pekerja Dataflow harus ditetapkan ke nilai optimal untuk performa yang baik. Terlalu banyak pekerja melebihi beban Spanner dan terlalu sedikit pekerja menyebabkan performa impor yang buruk.

Jumlah maksimum pekerja sangat bergantung pada ukuran data, tetapi idealnya, total penggunaan CPU Spanner harus antara 70% hingga 90%. Hal ini memberikan keseimbangan yang baik antara efisiensi Spanner dan penyelesaian tugas bebas error.

Untuk mencapai target penggunaan tersebut di sebagian besar skema dan skenario, sebaiknya jumlah maksimum vCPU pekerja antara 4-6x jumlah node Spanner.

Misalnya, untuk instance Spanner yang terdiri dari 10 node, yang menggunakan pekerja n1-standard-2, Anda akan menetapkan maksimal pekerja ke 25, sehingga menghasilkan 50 vCPU.