Aliran data perubahan Spanner ke template BigQuery adalah pipeline streaming yang mengalirkan data perubahan data Spanner dan menulisnya ke dalam tabel BigQuery menggunakan Dataflow Runner V2.
Semua kolom aliran data perubahan yang dipantau disertakan dalam setiap baris tabel BigQuery, terlepas dari apakah kolom tersebut diubah oleh transaksi Spanner atau tidak. Kolom yang tidak dipantau tidak disertakan dalam baris BigQuery. Setiap perubahan Spanner yang kurang dari watermark Dataflow akan berhasil diterapkan ke tabel BigQuery atau disimpan dalam antrean yang dihentikan untuk percobaan ulang. Baris BigQuery disisipkan tidak berurutan dibandingkan dengan pengurutan stempel waktu commit Spanner asli.
Jika tabel BigQuery yang diperlukan tidak ada, pipeline akan membuatnya. Jika tidak, tabel BigQuery yang sudah ada akan digunakan. Skema tabel BigQuery yang ada harus
berisi kolom terlacak yang sesuai dari tabel Spanner dan kolom metadata
tambahan apa pun yang tidak diabaikan secara eksplisit oleh opsi ignoreFields
.
Lihat deskripsi kolom metadata dalam daftar berikut.
Setiap baris BigQuery baru mencakup semua kolom yang dipantau oleh aliran data perubahan dari baris yang sesuai dalam tabel Spanner pada stempel waktu data perubahan.
Kolom metadata berikut ditambahkan ke tabel BigQuery. Untuk detail selengkapnya tentang kolom ini, lihat Data perubahan data di "Mengubah partisi, kumpulan data, dan kueri aliran data".
_metadata_spanner_mod_type
: Jenis modifikasi (menyisipkan, memperbarui, atau menghapus) transaksi Spanner. Diekstrak dari {i>change record<i} perubahan data {i>stream<i}._metadata_spanner_table_name
: Nama tabel Spanner. Kolom ini bukan nama tabel metadata konektor._metadata_spanner_commit_timestamp
: Stempel waktu commit Spanner, yang merupakan waktu saat perubahan di-commit. Nilai ini diekstrak dari catatan perubahan data aliran data perubahan._metadata_spanner_server_transaction_id
: String unik secara global yang mewakili transaksi Spanner tempat perubahan di-commit. Hanya gunakan nilai ini dalam konteks pemrosesan data aliran data perubahan. Hal ini tidak memiliki korelasi dengan ID transaksi di API Spanner. Nilai ini diekstrak dari catatan perubahan data aliran data perubahan._metadata_spanner_record_sequence
: Nomor urut untuk data dalam transaksi Spanner. Nomor urut dipastikan akan unik dan meningkat secara monoton, tetapi tidak harus berdekatan, dalam transaksi. Nilai ini diekstrak dari catatan perubahan data aliran data 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 catatan perubahan data aliran data perubahan._metadata_spanner_number_of_records_in_transaction
: Jumlah kumpulan data perubahan data yang merupakan bagian dari transaksi Spanner di semua partisi aliran perubahan. Nilai ini diekstrak dari catatan perubahan data aliran data perubahan._metadata_spanner_number_of_partitions_in_transaction
: Jumlah partisi yang menampilkan kumpulan data perubahan data untuk transaksi Spanner. Nilai ini diekstrak dari catatan perubahan data aliran data perubahan._metadata_big_query_commit_timestamp
: Stempel waktu commit saat baris disisipkan ke BigQuery. JikauseStorageWriteApi
adalahtrue
, kolom ini tidak otomatis dibuat di tabel log perubahan oleh pipeline. Dalam hal ini, Anda harus menambahkan kolom ini secara manual dalam tabel log perubahan jika diperlukan.
Saat menggunakan template ini, perhatikan detail berikut:
- Template ini tidak menerapkan perubahan skema dari Spanner ke BigQuery. Karena melakukan perubahan skema di Spanner kemungkinan akan merusak pipeline, Anda mungkin perlu membuat ulang pipeline setelah perubahan skema.
- Untuk jenis pengambilan nilai
OLD_AND_NEW_VALUES
danNEW_VALUES
, jika kumpulan data perubahan data berisi perubahan UPDATE, template perlu melakukan pembacaan yang tidak berlaku pada Spanner pada stempel waktu commit dari kumpulan data perubahan data untuk mengambil kolom yang tidak diubah tetapi dipantau. Pastikan untuk mengonfigurasi 'version_retention_period' database dengan benar untuk pembacaan yang sudah tidak berlaku. Untuk jenis pengambilan nilaiNEW_ROW
, template ini lebih efisien karena catatan perubahan data menangkap baris baru yang lengkap termasuk kolom yang tidak diperbarui dalam permintaan UPDATE, dan template tidak perlu melakukan pembacaan yang sudah tidak berlaku. - Untuk meminimalkan latensi jaringan dan biaya transportasi jaringan, jalankan tugas Dataflow dari region yang sama dengan tabel BigQuery atau instance Spanner Anda. Jika Anda menggunakan sumber, sink, lokasi file staging, atau lokasi file sementara yang berada di luar region tugas, data Anda mungkin dikirim lintas region. Untuk mengetahui informasi selengkapnya, lihat Region Dataflow.
- Template ini mendukung semua jenis data Spanner yang valid. Jika jenis BigQuery lebih tepat daripada jenis Spanner, kerugian presisi dapat terjadi selama transformasi. Khususnya:
- Untuk jenis JSON Spanner, urutan anggota objek diurutkan secara leksikografis, tetapi tidak ada jaminan untuk jenis JSON BigQuery.
- Spanner mendukung jenis TIMESTAMP nanodetik, tetapi BigQuery hanya mendukung jenis TIMESTAMP mikrodetik.
- Template ini tidak mendukung penggunaan BigQuery Storage Write API dalam mode tepat satu kali.
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 data perubahan Spanner harus ada sebelum menjalankan pipeline.
- Set data BigQuery harus ada sebelum menjalankan pipeline.
Parameter template
Parameter | Deskripsi |
---|---|
spannerInstanceId |
Instance Spanner yang akan membaca aliran perubahan. |
spannerDatabase |
Database Spanner tempat aliran data perubahan dibaca. |
spannerDatabaseRole |
Opsional: Peran database Spanner yang akan digunakan saat menjalankan template. Parameter ini hanya diperlukan jika akun utama IAM yang menjalankan template adalah pengguna kontrol akses yang sangat terperinci. Peran database harus memiliki hak istimewa SELECT di aliran perubahan dan hak istimewa EXECUTE pada fungsi baca aliran data perubahan. Untuk mengetahui informasi selengkapnya, lihat
Kontrol akses terperinci untuk aliran 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 data perubahan. |
spannerChangeStreamName |
Nama aliran data perubahan Spanner yang akan dibaca. |
bigQueryDataset |
Set data BigQuery untuk output aliran data perubahan. |
spannerProjectId |
Opsional: Project untuk membaca aliran perubahan. Nilai ini juga merupakan project tempat tabel metadata konektor aliran data perubahan dibuat. Nilai default untuk parameter ini adalah project tempat pipeline Dataflow berjalan. |
spannerMetadataTableName |
Opsional: Spanner mengubah nama tabel metadata konektor aliran data yang akan digunakan. Jika tidak disediakan, tabel metadata konektor aliran data perubahan Spanner akan otomatis dibuat selama alur pipeline. Anda harus memberikan parameter ini saat memperbarui pipeline yang ada. Jika tidak, jangan berikan parameter ini. |
rpcPriority |
Opsional: Prioritas permintaan untuk panggilan Spanner. Nilai harus berupa salah satu dari nilai berikut: HIGH , MEDIUM , atau LOW . Nilai defaultnya adalah HIGH . |
startTimestamp |
Opsional: DateTime awal, inklusif, digunakan untuk membaca aliran perubahan. Ex-2021-10-12T07:20:50.52Z. Setelan default-nya adalah stempel waktu saat pipeline dimulai, yaitu waktu saat ini. |
endTimestamp |
Opsional: DateTime akhir, inklusif, digunakan untuk membaca aliran perubahan. Ex-2021-10-12T07:20:50.52Z. Setelan defaultnya adalah waktu tak terbatas di masa mendatang. |
bigQueryProjectId |
Opsional: Project BigQuery. Nilai defaultnya adalah project untuk tugas Dataflow. |
bigQueryChangelogTableNameTemplate |
Opsional: Template untuk nama tabel log perubahan BigQuery. Nilai defaultnya adalah _metadata_spanner_table_name_changelog. |
deadLetterQueueDirectory |
Opsional: Jalur untuk menyimpan data yang belum diproses yang gagal diproses. Jalur default adalah direktori di bawah lokasi sementara tugas Dataflow. Nilai default biasanya sudah memadai. |
dlqRetryMinutes |
Opsional: Jumlah menit antara percobaan ulang antrean yang dihentikan pengirimannya. Nilai defaultnya adalah 10. |
ignoreFields |
Opsional: Daftar kolom yang dipisahkan koma (peka huruf besar/kecil) yang akan diabaikan.
Kolom ini mungkin berupa kolom tabel yang dipantau, atau kolom metadata yang ditambahkan oleh pipeline. Kolom yang diabaikan tidak disisipkan ke BigQuery. Jika Anda
mengabaikan kolom _metadata_spanner_table_name , parameter bigQueryChangelogTableNameTemplate
juga akan diabaikan. |
useStorageWriteApi |
Opsional:
Jika true , pipeline akan menggunakan
BigQuery Storage Write API. Nilai defaultnya adalah false . Untuk informasi selengkapnya, lihat
Menggunakan Storage Write API.
|
useStorageWriteApiAtLeastOnce |
Opsional:
Saat menggunakan Storage Write API, menentukan semantik penulisan. Untuk menggunakan
semantik minimal satu kali, tetapkan parameter ini ke true . Untuk menggunakan semantik tepat satu kali,
tetapkan parameter ke false . Parameter ini hanya berlaku jika useStorageWriteApi adalah true . Nilai defaultnya adalah false .
|
numStorageWriteApiStreams |
Opsional: Menentukan jumlah aliran operasi tulis saat menggunakan Storage Write API. Jika useStorageWriteApi adalah true dan useStorageWriteApiAtLeastOnce adalah false , Anda harus menetapkan parameter ini.
|
storageWriteApiTriggeringFrequencySec |
Opsional:
Saat menggunakan Storage Write API, menentukan frekuensi pemicu, dalam hitungan detik. Jika useStorageWriteApi adalah true dan useStorageWriteApiAtLeastOnce adalah false , Anda harus menetapkan parameter ini.
|
Menjalankan template
Konsol
- Buka halaman Create job from template Dataflow. Buka Buat tugas dari template
- Di kolom Job name, masukkan nama pekerjaan yang unik.
- Opsional: Untuk Endpoint regional, pilih nilai dari menu drop-down. Region
default-nya adalah
us-central1
.Untuk daftar region tempat Anda dapat menjalankan tugas Dataflow, lihat Lokasi Dataflow.
- Dari menu drop-down Dataflow template, pilih the Cloud Spanner change streams to BigQuery template.
- Di kolom parameter yang disediakan, masukkan parameter value 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 pekerjaan unik pilihan AndaVERSION
: versi template yang ingin Anda gunakanAnda dapat menggunakan nilai berikut:
latest
untuk menggunakan versi terbaru template, yang tersedia di folder induk tidak bertanggal 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 bertanggal masing-masing dalam bucket— gs://dataflow-templates-REGION_NAME/
REGION_NAME
: region tempat Anda ingin men-deploy tugas Dataflow, misalnyaus-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 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 project Google Cloud tempat Anda ingin menjalankan tugas DataflowJOB_NAME
: nama pekerjaan unik pilihan AndaVERSION
: versi template yang ingin Anda gunakanAnda dapat menggunakan nilai berikut:
latest
untuk menggunakan versi terbaru template, yang tersedia di folder induk tidak bertanggal 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 bertanggal masing-masing dalam bucket— gs://dataflow-templates-REGION_NAME/
LOCATION
: region tempat Anda ingin men-deploy tugas Dataflow, misalnyaus-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 selanjutnya
- Pelajari Template Dataflow.
- Lihat daftar template yang disediakan Google.