Mengekspor data ke Spanner (ETL terbalik)

Dokumen ini menjelaskan cara menyiapkan alur kerja ekstraksi, transformasi, dan pemuatan terbalik (ETL terbalik) dari BigQuery ke Spanner. Anda dapat melakukannya menggunakan pernyataan EXPORT DATA untuk mengekspor data dari tabel BigQuery ke tabel Spanner.

Alur kerja ETL terbalik ini menggabungkan kemampuan analisis di BigQuery dengan latensi rendah dan throughput tinggi di Spanner. Alur kerja ini memungkinkan Anda menyajikan data kepada pengguna aplikasi tanpa menghabiskan kuota dan batas di BigQuery.

Sebelum memulai

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengekspor data BigQuery ke Spanner, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Batasan

  • Fitur ini tidak didukung di Assured Workloads.

  • Jenis data BigQuery berikut tidak memiliki padanan di Spanner dan tidak didukung:

Dialek database Spanner Jenis BigQuery yang tidak didukung
Semua dialek
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: Jenis NUMERIC yang didukung tidak cukup lebar. Pertimbangkan untuk menambahkan transmisi eksplisit ke jenis NUMERIC dalam kueri.
  • Ukuran maksimum baris yang diekspor tidak boleh melebihi 1 MiB.

  • Spanner menerapkan integritas referensial selama ekspor. Jika tabel target adalah turunan dari tabel lain (INTERLEAVE IN PARENT), atau jika tabel target memiliki batasan kunci asing, kunci asing dan kunci induk akan divalidasi selama ekspor. Jika baris yang diekspor ditulis ke tabel dengan INTERLEAVE IN PARENT dan baris induk tidak ada, ekspor akan gagal dengan pesan "Baris induk tidak ada. Error "Baris tidak dapat ditulis". Jika baris yang diekspor ditulis ke tabel dengan batasan kunci asing dan mereferensikan kunci yang tidak ada, ekspor akan gagal dengan error "Foreign key constraint is violated". Saat mengekspor ke beberapa tabel, sebaiknya urutkan ekspor untuk memastikan integritas referensial akan dipertahankan selama ekspor. Hal ini biasanya berarti mengekspor tabel induk dan tabel yang direferensikan oleh kunci asing sebelum tabel yang mereferensikan tabel tersebut.

    Jika tabel yang menjadi target ekspor memiliki batasan kunci asing, atau merupakan turunan dari tabel lain (INTERLEAVE IN PARENT), tabel induk harus diisi sebelum ekspor tabel turunan, dan harus berisi semua kunci yang sesuai. Upaya untuk mengekspor tabel turunan saat tabel induk tidak memiliki kumpulan lengkap kunci yang relevan akan gagal.

  • Tugas ekspor ke Spanner memiliki durasi maksimum 6 jam. Untuk mengetahui informasi tentang cara mengoptimalkan tugas ekspor besar, lihat Pengoptimalan ekspor. Sebagai alternatif, pertimbangkan untuk membagi input menjadi blok data individual, yang dapat diekspor sebagai tugas ekspor individual.

  • Ekspor ke Spanner hanya didukung untuk edisi BigQuery Enterprise atau Enterprise Plus. Edisi Standar BigQuery dan komputasi on-demand tidak didukung.

  • Ekspor ke skema Spanner default didukung. Tabel dari skema bernama tidak didukung.

  • Anda tidak dapat menggunakan kueri berkelanjutan untuk mengekspor ke tabel Spanner dengan kunci utama yang dibuat otomatis.

  • Anda tidak dapat menggunakan kueri berkelanjutan untuk mengekspor ke tabel Spanner dalam database dialek PostgreSQL.

  • Saat menggunakan kueri berkelanjutan untuk mengekspor ke tabel Spanner, pastikan Anda memilih kunci utama yang tidak sesuai dengan bilangan bulat yang meningkat secara monoton di tabel BigQuery Anda. Melakukannya dapat menyebabkan masalah performa dalam ekspor Anda. Untuk mengetahui informasi tentang kunci utama di Spanner, dan cara memitigasi masalah performa ini, lihat Memilih kunci utama.

Mengonfigurasi ekspor dengan opsi spanner_options

Anda dapat menggunakan opsi spanner_options untuk menentukan tujuan database dan tabel Spanner. Konfigurasi dinyatakan dalam bentuk string JSON, seperti yang ditunjukkan contoh berikut:

EXPORT DATA OPTIONS(
   uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
   spanner_options = """{
      "table": "TABLE_NAME",
      "change_timestamp_column": "CHANGE_TIMESTAMP",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Ganti kode berikut:

  • PROJECT_ID: nama project Trusted Cloud Anda.
  • INSTANCE_ID: nama instance database Anda.
  • DATABASE_ID: nama database Anda.
  • TABLE_NAME: nama tabel tujuan yang ada.
  • CHANGE_TIMESTAMP: nama kolom jenis TIMESTAMP dalam tabel Spanner untuk melacak stempel waktu pembaruan terbaru dari baris yang sesuai dalam tabel BigQuery yang diekspor. Kolom ini bersifat opsional untuk batch dan ekspor berkelanjutan ke Spanner, tetapi direkomendasikan untuk kasus penggunaan yang mengutamakan urutan baris yang diekspor dengan kunci utama yang sama.
  • PRIORITY (opsional): priority permintaan penulisan. Nilai yang diizinkan: LOW, MEDIUM, HIGH. Nilai default: MEDIUM.
  • TAG (opsional): tag permintaan untuk membantu mengidentifikasi traffic pengekspor dalam pemantauan Spanner. Nilai default: bq_export.

Persyaratan kueri ekspor

Untuk mengekspor hasil kueri ke Spanner, hasilnya harus memenuhi persyaratan berikut:

  • Semua kolom dalam kumpulan hasil harus ada di tabel tujuan, dan jenisnya harus cocok atau dapat dikonversi.
  • Kumpulan hasil harus berisi semua kolom NOT NULL untuk tabel tujuan.
  • Nilai kolom tidak boleh melebihi batas ukuran data dalam tabel Spanner.
  • Jenis kolom apa pun yang tidak didukung harus dikonversi ke salah satu jenis yang didukung sebelum diekspor ke Spanner.

Konversi jenis

Agar mudah digunakan, pengekspor Spanner otomatis menerapkan konversi jenis berikut:

Jenis BigQuery Jenis spanner
BIGNUMERIC NUMERIC (khusus dialek PostgreSQL)
FLOAT64 FLOAT32
BYTES PROTO
INT64 ENUM

Mengekspor data

Anda dapat menggunakan pernyataan EXPORT DATA untuk mengekspor data dari tabel BigQuery ke tabel Spanner.

Contoh berikut mengekspor kolom yang dipilih dari tabel bernama mydataset.table1:

EXPORT DATA OPTIONS (
  uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
  spanner_options="""{ "table": "TABLE_NAME" }"""
)
AS SELECT * FROM mydataset.table1;

Ganti kode berikut:

  • PROJECT_ID: nama Trusted Cloud project Anda
  • INSTANCE_ID: nama instance database Anda
  • DATABASE_ID: nama database Anda
  • TABLE_NAME: nama tabel tujuan yang ada

Ekspor beberapa hasil dengan nilai rowkey yang sama

Saat Anda mengekspor hasil yang berisi beberapa baris dengan nilai rowkey yang sama, nilai yang ditulis ke Spanner akan berada di baris Spanner yang sama. Hanya satu baris BigQuery yang cocok (tidak ada jaminan yang mana) yang akan ada di set baris Spanner yang dihasilkan oleh ekspor.

Mengekspor secara berkelanjutan

Untuk memproses kueri ekspor secara berkelanjutan, Anda dapat mengonfigurasinya sebagai kueri berkelanjutan.

Pengoptimalan ekspor

Untuk mengoptimalkan ekspor data dari BigQuery ke Spanner, Anda dapat mencoba hal berikut:

  • Meningkatkan jumlah node di instance tujuan Spanner. Perhatikan bahwa selama tahap awal ekspor, peningkatan jumlah node dalam instance mungkin tidak langsung menyebabkan peningkatan throughput ekspor. Mungkin ada sedikit penundaan saat Spanner melakukan pemisahan berbasis beban. Dengan pemisahan berbasis beban, throughput ekspor akan meningkat dan stabil tidak lama setelahnya. Untuk mengetahui detail tambahan tentang memaksimalkan throughput penulisan, lihat Ringkasan performa.

  • Tentukan prioritas HIGH dalam spanner_options. Namun, melakukannya dapat menyebabkan penurunan performa yang signifikan untuk beban kerja lain yang ditayangkan oleh instance yang sama.

  • Hindari pengurutan hasil kueri. Jika set hasil berisi semua kolom kunci utama, maka pengekspor akan otomatis mengurutkan kunci utama tabel tujuan untuk menyederhanakan penulisan dan meminimalkan pertentangan.

    Jika kunci utama tabel tujuan menyertakan kolom yang dibuat, Anda harus menambahkan ekspresi kolom yang dibuat ke kueri untuk memastikan data yang diekspor diurutkan dengan benar.

Harga

Saat mengekspor data ke Spanner menggunakan pernyataan EXPORT DATA, Anda akan ditagih menggunakan harga komputasi kapasitas BigQuery. Untuk menjalankan kueri berkelanjutan, Anda harus memiliki penetapan reservasi yang menggunakan jenis tugas CONTINUOUS.

Ekspor BigQuery ke Spanner yang melintasi batas regional dikenai biaya menggunakan tarif ekstraksi data. Untuk informasi lebih lanjut, lihat Harga BigQuery. Untuk menghindari biaya transfer data, pastikan ekspor BigQuery Anda berjalan di region yang sama dengan pemimpin default Spanner. Ekspor kueri berkelanjutan tidak mendukung ekspor yang melintasi batas regional.

Setelah data diekspor, Anda dikenai biaya penyimpanan data di Spanner. Untuk mengetahui informasi selengkapnya, lihat Harga Spanner.