Mengekspor data ke Spanner (ETL terbalik)
Untuk memberikan masukan atau meminta dukungan terkait fitur ini, kirim email ke bq-cloud-spanner-federation-preview@google.com
Dokumen ini menjelaskan cara menyiapkan alur kerja ekstrak, transformasi, dan
muat balik (ETL balik) dari BigQuery ke Spanner. Anda dapat melakukannya dengan 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 menayangkan data kepada pengguna aplikasi tanpa menghabiskan kuota dan batas di BigQuery.
Sebelum memulai
Buat database Spanner, termasuk tabel untuk menerima data yang diekspor.
Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengekspor data BigQuery ke Spanner, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Mengekspor data dari tabel BigQuery:
BigQuery Data Viewer (
roles/bigquery.dataViewer
) -
Menjalankan tugas ekspor:
BigQuery User (
roles/bigquery.user
) -
Periksa parameter instance Spanner:
Cloud Spanner Viewer (
roles/spanner.viewer
) -
Menulis data ke tabel Spanner:
Cloud Spanner Database User (
roles/spanner.databaseUser
)
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
- Jenis data BigQuery berikut tidak memiliki padanan di Spanner dan tidak didukung:
Dialek database Spanner | Jenis BigQuery yang tidak didukung |
---|---|
Semua dialek |
|
GoogleSQL |
|
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. 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 "Batasan kunci asing dilanggar". Saat mengekspor ke beberapa tabel, sebaiknya urutkan ekspor untuk memastikan integritas referensi akan dipertahankan melalui 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 kunci yang relevan secara lengkap akan gagal.
Tugas ekspor ke Spanner memiliki durasi maksimum 6 jam. Untuk mengetahui informasi tentang cara mengoptimalkan tugas ekspor besar, lihat Pengoptimalan ekspor. Atau, pertimbangkan untuk memisahkan 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 sesuai permintaan tidak didukung.
Mengonfigurasi ekspor dengan opsi spanner_options
Anda dapat menggunakan opsi spanner_options
untuk menentukan database dan tabel Spanner tujuan. Konfigurasi dinyatakan dalam bentuk string JSON, seperti yang ditunjukkan pada 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
", "priority": "PRIORITY
", "tag": "TAG
", }""" )
Ganti kode berikut:
PROJECT_ID
: nama project Google Cloud Anda.INSTANCE_ID
: nama instance database Anda.DATABASE_ID
: nama database Anda.TABLE_NAME
: nama tabel tujuan yang ada.PRIORITY
(opsional): prioritas permintaan tulis. Nilai yang diizinkan:LOW
,MEDIUM
,HIGH
. Nilai default:MEDIUM
.TAG
(opsional): tag permintaan untuk membantu mengidentifikasi traffic eksportir dalam pemantauan Spanner. Nilai default:bq_export
.
Persyaratan kueri ekspor
Untuk mengekspor hasil kueri ke Spanner, hasilnya harus memenuhi persyaratan berikut:
- Semua kolom dalam set hasil harus ada di tabel tujuan, dan jenisnya harus cocok.
- 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 mengekspor ke Spanner.
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 yang 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 project Google Cloud AndaINSTANCE_ID
: nama instance database AndaDATABASE_ID
: nama database AndaTABLE_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 mana yang cocok) yang akan ada dalam kumpulan baris
Spanner yang dihasilkan oleh ekspor.
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, meningkatkan 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 kemudian. Untuk mengetahui detail tambahan tentang cara memaksimalkan throughput operasi tulis, lihat Ringkasan performa.
Tentukan prioritas
HIGH
dalamspanner_options
. Namun, tindakan ini dapat menyebabkan penurunan performa yang signifikan untuk beban kerja lain yang ditayangkan oleh instance yang sama.Hindari mengurutkan hasil kueri. Jika set hasil berisi semua kolom kunci utama, eksportir akan otomatis mengurutkan kunci utama tabel tujuan untuk menyederhanakan penulisan dan meminimalkan pertentangan.
Jika kunci utama tabel tujuan menyertakan kolom yang dihasilkan, Anda harus menambahkan ekspresi kolom yang dihasilkan ke kueri untuk memastikan bahwa data yang diekspor diurutkan dengan benar.
Harga
Untuk mengetahui informasi tentang harga ekspor data, lihat Harga BigQuery.
Setelah data diekspor, Anda dikenai biaya penyimpanan data di Spanner. Untuk informasi selengkapnya, lihat Harga Spanner.