Template streaming perubahan Spanner ke BigQuery adalah pipeline streaming yang melakukan streaming rekaman perubahan data Spanner dan menuliskannya ke tabel BigQuery menggunakan Dataflow Runner V2.
Semua kolom yang dipantau aliran perubahannya disertakan dalam setiap baris tabel BigQuery, terlepas dari apakah kolom tersebut dimodifikasi oleh transaksi Spanner atau tidak. Kolom yang tidak dipantau tidak disertakan dalam baris BigQuery. Setiap perubahan Spanner yang kurang dari tanda air Dataflow berhasil diterapkan ke tabel BigQuery atau disimpan di antrean pesan yang tidak terkirim untuk dicoba lagi. Baris BigQuery disisipkan di luar urutan dibandingkan dengan pengurutan stempel waktu commit Spanner asli.
Jika tabel BigQuery yang diperlukan tidak ada, pipeline akan membuatnya. Jika tidak,
tabel BigQuery yang ada akan digunakan. Skema tabel BigQuery yang ada harus
berisi kolom yang dilacak yang sesuai dari tabel Spanner dan kolom metadata tambahan
yang tidak diabaikan secara eksplisit oleh opsi ignoreFields
.
Lihat deskripsi kolom metadata dalam daftar berikut.
Setiap baris BigQuery baru menyertakan semua kolom yang dipantau oleh aliran perubahan dari baris yang sesuai dalam tabel Spanner pada stempel waktu catatan perubahan.
Kolom metadata berikut ditambahkan ke tabel BigQuery. Untuk detail selengkapnya tentang kolom ini, lihat Kumpulan data perubahan data di "Partisi, kumpulan data, dan kueri streaming perubahan".
_metadata_spanner_mod_type
: Jenis modifikasi (penyisipan, update, atau penghapusan) transaksi Spanner. Diekstrak dari perubahan data aliran perubahan mencatat perubahan data._metadata_spanner_table_name
: Nama tabel Spanner. Kolom ini bukan nama tabel metadata konektor._metadata_spanner_commit_timestamp
: Stempel waktu commit Spanner, yaitu waktu saat perubahan di-commit. Nilai ini diekstrak dari rekaman perubahan data aliran perubahan._metadata_spanner_server_transaction_id
: String unik secara global yang mewakili transaksi Spanner tempat perubahan dilakukan. Hanya gunakan nilai ini dalam konteks pemrosesan rekaman aliran perubahan. Tidak berkorelasi dengan ID transaksi di Spanner API. Nilai ini diekstrak dari rekaman perubahan data aliran perubahan._metadata_spanner_record_sequence
: Nomor urut untuk data dalam transaksi Spanner. Nomor urut dijamin unik dan meningkat secara monoton, tetapi tidak harus berurutan, dalam transaksi. Nilai ini diekstrak dari rekaman perubahan data aliran perubahan._metadata_spanner_is_last_record_in_transaction_in_partition
: Menunjukkan apakah data adalah data terakhir untuk transaksi Spanner di partisi saat ini. Nilai ini diekstrak dari rekaman perubahan data aliran perubahan._metadata_spanner_number_of_records_in_transaction
: Jumlah data perubahan yang merupakan bagian dari transaksi Spanner di semua partisi aliran data perubahan. Nilai ini diekstrak dari rekaman perubahan data aliran perubahan._metadata_spanner_number_of_partitions_in_transaction
: Jumlah partisi yang menampilkan rekaman perubahan data untuk transaksi Spanner. Nilai ini diekstrak dari rekaman perubahan data aliran perubahan._metadata_big_query_commit_timestamp
: Stempel waktu commit saat baris dimasukkan ke dalam BigQuery. JikauseStorageWriteApi
adalahtrue
, kolom ini tidak dibuat secara otomatis di tabel log perubahan oleh pipeline. Dalam hal ini, Anda harus menambahkan kolom ini secara manual di tabel log perubahan dan menetapkanCURRENT_TIMESTAMP
sebagai nilai defaultnya jika diperlukan.
Saat menggunakan template ini, perhatikan detail berikut:
- Anda dapat menggunakan template ini untuk menyebarkan kolom baru pada tabel yang sudah ada atau tabel baru dari Spanner ke BigQuery. Untuk mengetahui informasi selengkapnya, lihat Menangani penambahan tabel atau kolom pelacakan.
- Untuk jenis pengambilan nilai
OLD_AND_NEW_VALUES
danNEW_VALUES
, saat rekaman perubahan data berisi perubahan UPDATE, template perlu melakukan pembacaan yang tidak valid ke Spanner pada stempel waktu commit rekaman perubahan data untuk mengambil kolom yang tidak berubah tetapi diawasi. Pastikan Anda mengonfigurasi 'version_retention_period' database dengan benar untuk pembacaan yang tidak berlaku. Untuk jenis pengambilan nilaiNEW_ROW
, template lebih efisien, karena catatan perubahan data mengambil seluruh baris baru termasuk kolom yang tidak diperbarui dalam permintaan UPDATE, dan template tidak perlu melakukan pembacaan yang tidak valid. - Untuk meminimalkan latensi jaringan dan biaya transportasi jaringan, jalankan tugas Dataflow dari region yang sama dengan instance Spanner atau tabel BigQuery Anda. Jika Anda menggunakan sumber, tujuan, lokasi file penyiapan, atau lokasi file sementara yang berada di luar region pekerjaan Anda, data Anda mungkin dikirim ke berbagai region. Untuk mengetahui informasi selengkapnya, lihat Region Dataflow.
- Template ini mendukung semua jenis data Spanner yang valid. Jika jenis BigQuery
lebih presisi daripada jenis Spanner, presisi dapat hilang selama
transformasi. Khususnya:
- Untuk jenis JSON Spanner, urutan anggota objek diurutkan secara leksikografis, tetapi tidak ada jaminan seperti itu untuk jenis JSON BigQuery.
- Spanner mendukung jenis TIMESTAMP nanodetik, tetapi BigQuery hanya mendukung jenis TIMESTAMP mikrodetik.
Pelajari lebih lanjut aliran perubahan, cara membuat pipeline Dataflow aliran perubahan, dan praktik terbaik.
Persyaratan pipeline
- Instance Spanner harus ada sebelum menjalankan pipeline.
- Database Spanner harus ada sebelum menjalankan pipeline.
- Instance metadata Spanner harus ada sebelum menjalankan pipeline.
- Database metadata Spanner harus ada sebelum menjalankan pipeline.
- Aliran perubahan Spanner harus ada sebelum menjalankan pipeline.
- Set data BigQuery harus ada sebelum menjalankan pipeline.
Menangani penambahan tabel atau kolom pelacakan
Bagian ini menjelaskan praktik terbaik untuk menangani penambahan kolom dan tabel Spanner pelacakan saat pipeline sedang berjalan. Versi template tertua yang didukung
untuk fitur ini adalah 2024-09-19-00_RC00
.
- Sebelum menambahkan kolom baru ke cakupan aliran perubahan Spanner,
tambahkan terlebih dahulu kolom ke tabel log perubahan BigQuery. Kolom
yang ditambahkan harus memiliki jenis data yang cocok dan berupa
NULLABLE
. Tunggu setidaknya 10 menit sebelum Anda melanjutkan untuk membuat kolom atau tabel baru di Spanner. Menulis ke kolom baru tanpa menunggu dapat menghasilkan data yang belum diproses dengan kode error tidak valid di direktori antrean surat yang tidak terkirim. - Untuk menambahkan tabel baru, tambahkan tabel di database Spanner terlebih dahulu. Tabel dibuat secara otomatis di BigQuery saat pipeline menerima rekaman untuk tabel baru.
- Setelah menambahkan kolom atau tabel baru di database Spanner, pastikan untuk mengubah aliran perubahan untuk melacak kolom atau tabel baru yang Anda inginkan jika kolom atau tabel tersebut belum dilacak secara implisit.
- Template tidak menghapus tabel atau kolom dari BigQuery. Jika kolom dihapus dari tabel Spanner, nilai null akan diisi ke kolom log perubahan BigQuery untuk rekaman yang dibuat setelah kolom dihapus dari tabel Spanner, kecuali jika Anda menghapus kolom dari BigQuery secara manual.
- Template tidak mendukung pembaruan jenis kolom. Meskipun
Spanner mendukung perubahan kolom
STRING
menjadi kolomBYTES
atau kolomBYTES
menjadi kolomSTRING
, Anda tidak dapat mengubah jenis data kolom yang ada atau menggunakan nama kolom yang sama dengan jenis data yang berbeda di BigQuery. Jika Anda menghapus dan membuat ulang kolom dengan nama yang sama tetapi jenis yang berbeda di Spanner, data mungkin ditulis ke kolom BigQuery yang ada, tetapi jenisnya tidak berubah. - Template ini tidak mendukung pembaruan mode kolom. Kolom metadata
yang direplikasi ke BigQuery ditetapkan ke mode
REQUIRED
. Semua kolom lain yang direplikasi ke BigQuery disetel keNULLABLE
, terlepas dari apakah kolom tersebut ditentukan sebagaiNOT NULL
dalam tabel Spanner. Anda tidak dapat memperbarui kolomNULLABLE
ke modeREQUIRED
di BigQuery. - Mengubah jenis pengambilan nilai aliran perubahan tidak didukung untuk pipeline yang sedang berjalan.
Parameter template
Parameter yang diperlukan
- spannerInstanceId: Instance Spanner untuk membaca aliran data perubahan.
- spannerDatabase: Database Spanner untuk membaca aliran data perubahan.
- spannerMetadataInstanceId: Instance Spanner yang akan digunakan untuk tabel metadata konektor aliran data perubahan.
- spannerMetadataDatabase: Database Spanner yang akan digunakan untuk tabel metadata konektor aliran perubahan.
- spannerChangeStreamName: Nama aliran data perubahan Spanner yang akan dibaca.
- bigQueryDataset: Set data BigQuery untuk output aliran perubahan.
Parameter opsional
- spannerProjectId: Project untuk membaca aliran data perubahan. Nilai ini juga merupakan project tempat tabel metadata konektor aliran perubahan dibuat. Nilai default untuk parameter ini adalah project tempat pipeline Dataflow berjalan.
- spannerDatabaseRole: Peran database Spanner yang akan digunakan saat menjalankan template. Parameter ini hanya diperlukan jika pokok IAM yang menjalankan template adalah pengguna kontrol akses terperinci. Peran database harus memiliki hak istimewa
SELECT
pada aliran perubahan dan hak istimewaEXECUTE
pada fungsi baca aliran perubahan. Untuk mengetahui informasi selengkapnya, lihat Kontrol akses terperinci untuk aliran perubahan (https://cloud.google.com/spanner/docs/fgac-change-streams). - spannerMetadataTableName: Nama tabel metadata konektor aliran perubahan Spanner yang akan digunakan. Jika tidak disediakan, tabel metadata konektor aliran perubahan Spanner akan dibuat secara otomatis selama alur pipeline. Anda harus memberikan parameter ini saat memperbarui pipeline yang ada. Jika tidak, jangan berikan parameter ini.
- rpcPriority: Prioritas permintaan untuk panggilan Spanner. Nilainya harus salah satu nilai berikut:
HIGH
,MEDIUM
, atauLOW
. Nilai defaultnya adalahHIGH
. - spannerHost: Endpoint Cloud Spanner yang akan dipanggil dalam template. Hanya digunakan untuk pengujian. Contoh,
https://batch-spanner.googleapis.com
. - startTimestamp: DateTime awal (https://datatracker.ietf.org/doc/html/rfc3339), inklusif, yang akan digunakan untuk membaca aliran perubahan. Ex-2021-10-12T07:20:50.52Z. Secara default, stempel waktu saat pipeline dimulai, yaitu waktu saat ini.
- endTimestamp: DateTime akhir (https://datatracker.ietf.org/doc/html/rfc3339), inklusif, yang akan digunakan untuk membaca aliran perubahan.Contoh: 2021-10-12T07:20:50.52Z. Defaultnya adalah waktu yang tidak terbatas di masa mendatang.
- bigQueryProjectId: Project BigQuery. Nilai defaultnya adalah project untuk tugas Dataflow.
- bigQueryChangelogTableNameTemplate: Template untuk nama tabel BigQuery yang berisi log perubahan. Default-nya adalah: {_metadata_spanner_table_name}_changelog.
- deadLetterQueueDirectory: Jalur untuk menyimpan semua data yang belum diproses. Jalur default adalah direktori di bawah lokasi sementara tugas Dataflow. Nilai default biasanya sudah cukup.
- dlqRetryMinutes: Jumlah menit antara percobaan ulang antrean pesan yang tidak terkirim. Nilai defaultnya adalah
10
. - ignoreFields: Daftar kolom yang dipisahkan koma (peka huruf besar/kecil) yang akan diabaikan. Kolom ini mungkin berupa kolom tabel yang ditonton, atau kolom metadata yang ditambahkan oleh pipeline. Kolom yang diabaikan tidak dimasukkan ke BigQuery. Jika Anda mengabaikan kolom _metadata_spanner_table_name, parameter bigQueryChangelogTableNameTemplate juga akan diabaikan. Nilai defaultnya adalah kosong.
- disableDlqRetries: Apakah akan menonaktifkan percobaan ulang untuk DLQ atau tidak. Nilai defaultnya adalah: false.
- useStorageWriteApi: Jika benar (true), pipeline akan menggunakan BigQuery Storage Write API (https://cloud.google.com/bigquery/docs/write-api). Nilai defaultnya adalah
false
. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Storage Write API (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce: Saat menggunakan Storage Write API, menentukan semantik penulisan. Untuk menggunakan semantik minimal satu kali (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), tetapkan parameter ini ke
true
. Untuk menggunakan semantik tepat satu kali, tetapkan parameter kefalse
. Parameter ini hanya berlaku jikauseStorageWriteApi
adalahtrue
. Nilai defaultnya adalahfalse
. - numStorageWriteApiStreams: Saat menggunakan Storage Write API, tentukan jumlah aliran penulisan. Jika
useStorageWriteApi
adalahtrue
danuseStorageWriteApiAtLeastOnce
adalahfalse
, Anda harus menetapkan parameter ini. Nilai default: 0. - storageWriteApiTriggeringFrequencySec: Saat menggunakan Storage Write API, menentukan frekuensi pemicuan, dalam detik. Jika
useStorageWriteApi
adalahtrue
danuseStorageWriteApiAtLeastOnce
adalahfalse
, Anda harus menetapkan parameter ini.
Menjalankan template
Konsol
- Buka halaman Dataflow Create job from template. Buka Membuat tugas dari template
- Di kolom Nama tugas, masukkan nama tugas yang unik.
- Opsional: Untuk Endpoint regional, pilih nilai dari menu drop-down. Region
default-nya adalah
us-central1
.Untuk mengetahui daftar region tempat Anda dapat menjalankan tugas Dataflow, lihat Lokasi Dataflow.
- Dari menu drop-down Template Dataflow, pilih the Cloud Spanner change streams to BigQuery template.
- Di kolom parameter yang disediakan, masukkan nilai parameter Anda.
- Klik Run job.
gcloud
Di shell atau terminal Anda, jalankan template:
gcloud dataflow flex-template run JOB_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Spanner_Change_Streams_to_BigQuery \ --region REGION_NAME \ --parameters \ spannerInstanceId=SPANNER_INSTANCE_ID,\ spannerDatabase=SPANNER_DATABASE,\ spannerMetadataInstanceId=SPANNER_METADATA_INSTANCE_ID,\ spannerMetadataDatabase=SPANNER_METADATA_DATABASE,\ spannerChangeStreamName=SPANNER_CHANGE_STREAM,\ bigQueryDataset=BIGQUERY_DATASET
Ganti kode berikut:
JOB_NAME
: nama tugas unik pilihan AndaVERSION
: versi template yang ingin Anda gunakanAnda dapat menggunakan nilai berikut:
latest
untuk menggunakan versi template terbaru, yang tersedia di folder induk tanpa tanggal di bucket— gs://dataflow-templates-REGION_NAME/latest/- nama versi, seperti
2023-09-12-00_RC00
, untuk menggunakan versi template tertentu, yang dapat ditemukan bertingkat di folder induk yang diberi tanggal di bucket— gs://dataflow-templates-REGION_NAME/
REGION_NAME
: region tempat Anda ingin men-deploy tugas Dataflow—misalnya,us-central1
SPANNER_INSTANCE_ID
: ID instance SpannerSPANNER_DATABASE
: Database SpannerSPANNER_METADATA_INSTANCE_ID
: ID instance metadata SpannerSPANNER_METADATA_DATABASE
: Database metadata SpannerSPANNER_CHANGE_STREAM
: Aliran data perubahan SpannerBIGQUERY_DATASET
: Set data BigQuery untuk output aliran perubahan
API
Untuk menjalankan template menggunakan REST API, kirim permintaan HTTP POST. Untuk mengetahui informasi selengkapnya tentang
API dan cakupan otorisasinya, lihat
projects.templates.launch
.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "parameters": { "spannerInstanceId": "SPANNER_INSTANCE_ID", "spannerDatabase": "SPANNER_DATABASE", "spannerMetadataInstanceId": "SPANNER_METADATA_INSTANCE_ID", "spannerMetadataDatabase": "SPANNER_METADATA_DATABASE", "spannerChangeStreamName": "SPANNER_CHANGE_STREAM", "bigQueryDataset": "BIGQUERY_DATASET" }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/Spanner_Change_Streams_to_BigQuery", } }
Ganti kode berikut:
PROJECT_ID
: ID Google Cloud project tempat Anda ingin menjalankan tugas DataflowJOB_NAME
: nama tugas unik pilihan AndaVERSION
: versi template yang ingin Anda gunakanAnda dapat menggunakan nilai berikut:
latest
untuk menggunakan versi template terbaru, yang tersedia di folder induk tanpa tanggal di bucket— gs://dataflow-templates-REGION_NAME/latest/- nama versi, seperti
2023-09-12-00_RC00
, untuk menggunakan versi template tertentu, yang dapat ditemukan bertingkat di folder induk yang diberi tanggal di bucket— gs://dataflow-templates-REGION_NAME/
LOCATION
: region tempat Anda ingin men-deploy tugas Dataflow—misalnya,us-central1
SPANNER_INSTANCE_ID
: ID instance SpannerSPANNER_DATABASE
: Database SpannerSPANNER_METADATA_INSTANCE_ID
: ID instance metadata SpannerSPANNER_METADATA_DATABASE
: Database metadata SpannerSPANNER_CHANGE_STREAM
: Aliran data perubahan SpannerBIGQUERY_DATASET
: Set data BigQuery untuk output aliran perubahan
Langkah berikutnya
- Pelajari template Dataflow.
- Lihat daftar template yang disediakan Google.