Topik ini menjelaskan fitur dan dukungan untuk sinkronisasi data Databricks di DataWorks.
Catatan penggunaan
Batasan
Kelompok sumber daya: Databricks Reader hanya mendukung kelompok sumber daya Serverless. Anda juga harus mengonfigurasi Gateway NAT Internet dan elastic IP addresses (EIPs) untuk VPC yang terkait dengan kelompok sumber daya tersebut.
Mode baca: Sinkronisasi data hanya mendukung pembacaan data dalam mode
JDBC.
Pembacaan konkuren dan konsistensi data
Untuk meningkatkan efisiensi sinkronisasi, Databricks Reader membagi data berdasarkan konfigurasi
splitPkdan menjalankan beberapa tugas secara konkuren. Perhatikan hal-hal berikut:Beberapa tugas konkuren tidak termasuk dalam transaksi database yang sama dan dieksekusi pada waktu yang berbeda.
Jika data terus-menerus ditulis ke sumber data, pembacaan konkuren dapat menghasilkan snapshot data yang tidak lengkap atau tidak konsisten.
Solusi: Karena keterbatasan teknis, tidak mungkin mencapai snapshot yang sepenuhnya konsisten di beberapa thread. Tersedia dua solusi. Pilih salah satu sesuai skenario bisnis Anda:
Solusi 1: Konfigurasikan sinkronisasi single-threaded tanpa pemisahan data (
splitPk). Ini menjamin konsistensi data yang ketat tetapi menghasilkan sinkronisasi yang lebih lambat.Solusi 2: Pastikan sumber data bersifat statis selama sinkronisasi. Misalnya, gunakan tabel terkunci, nonaktifkan sementara penulisan aplikasi, atau jeda sinkronisasi ke database sekunder. Metode ini lebih cepat tetapi dapat memengaruhi layanan online.
Pengkodean
Databricks Reader menggunakan Java Database Connectivity (JDBC) untuk mengekstrak data. JDBC secara otomatis menangani deteksi dan konversi pengkodean untuk berbagai database. Oleh karena itu, Anda tidak perlu mengonfigurasi pengkodean secara manual.
Sinkronisasi data inkremental
Databricks Reader mengekstrak data dengan mengeksekusi pernyataan
SELECT ... WHERE .... Kunci sinkronisasi inkremental adalah menyusun klausaWHERE.Metode yang direkomendasikan (berdasarkan bidang timestamp):
Tambahkan bidang timestamp, seperti
modify_time, ke tabel database sumber Anda.Saat aplikasi menambahkan atau memperbarui data, termasuk melakukan penghapusan logis, pastikan bidang timestamp ini diperbarui.
Dalam tugas sinkronisasi, gunakan bidang timestamp ini dalam klausa
WHEREuntuk menarik data yang telah berubah sejak titik sinkronisasi terakhir.
Skenario yang tidak didukung: Jika tabel sumber tidak memiliki bidang untuk membedakan data baru atau yang dimodifikasi, seperti timestamp atau ID auto-increment, Databricks Reader tidak dapat melakukan sinkronisasi inkremental. Dalam kasus ini, hanya dapat dilakukan sinkronisasi data penuh.
Tipe bidang yang didukung
Databricks Reader mendukung sebagian besar tipe data Databricks saat membaca data untuk tugas offline. Namun, beberapa tipe tidak didukung. Pastikan tipe data Anda kompatibel.
Tabel berikut mencantumkan tipe data Databricks yang dapat dikonversi oleh Databricks Reader.
Kategori | Tipe data Databricks |
Tipe bilangan bulat | TINYINT, SMALLINT, INT, BIGINT |
Tipe bilangan titik mengambang | FLOAT, DOUBLE, DECIMAL |
Tipe string | STRING |
Tipe tanggal dan waktu | DATE, TIMESTAMP, TIMESTAMP_NTZ |
Tipe Boolean | BOOLEAN |
Tipe kompleks | ARRAY, MAP, STRUCT |
Tipe lainnya | INTERVAL, BINARY, GEOGRAPHY(srid), GEOMETRY(srid) |
Buat sumber data
Sebelum mengembangkan tugas sinkronisasi data, Anda harus membuat sumber data yang sesuai di DataWorks. Untuk informasi selengkapnya, lihat Manajemen Sumber Data. Untuk deskripsi detail parameter konfigurasi, merujuklah pada prompt di halaman konfigurasi.
Kembangkan tugas sinkronisasi data
Untuk informasi tentang cara mengakses halaman konfigurasi dan proses konfigurasi umum untuk tugas sinkronisasi data, lihat panduan berikut.
Panduan mengonfigurasi tugas sinkronisasi offline untuk satu tabel
Untuk instruksi, lihat Konfigurasi tugas sinkronisasi offline di Antarmuka tanpa kode dan Konfigurasi tugas sinkronisasi offline di editor kode.
Untuk semua parameter dan demo skrip untuk editor kode, lihat Lampiran: Demo skrip dan deskripsi parameter.
FAQ
T:
[Databricks][JDBCDriver](500313)Kesalahan saat mengambil nilai data dari set hasil: Column13:[Databricks][JDBCDriver](500312)Kesalahan saat mengambil baris data: Konversi Timestamp gagal.J: Rentang nilai tipe Databricks TIMESTAMP melebihi rentang nilai tipe Java Timestamp. Jika suatu nilai berada di luar jangkauan, driver JDBC akan melaporkan kesalahan. Untuk mengatasi masalah ini, modifikasi konfigurasi
column. Contoh:"column": ["CAST(col_timestamp AS STRING)"].
Lampiran: Demo skrip dan deskripsi parameter
Konfigurasi skrip tugas offline
Jika Anda menggunakan editor kode untuk mengonfigurasi tugas offline, Anda harus mengonfigurasi parameter dalam skrip tugas mengikuti format standar. Untuk informasi selengkapnya, lihat Konfigurasi tugas sinkronisasi offline di editor kode. Bagian berikut menjelaskan parameter sumber data untuk editor kode.
Demo skrip Reader
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "databricks",
"parameter": {
"datasource": "databricks",
"schema": "schema1",
"table": "table1",
"readMode": "jdbc",
"where": "id>1",
"splitPk": "id",
"column": [
"c1",
"c2"
]
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
_ "name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"concurrent": 1
}
}
}Parameter skrip Reader
Parameter | Deskripsi | Wajib | Nilai default |
datasource | Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. | Ya | Tidak ada |
column | Set nama kolom yang akan disinkronkan dari tabel yang dikonfigurasi. Gunakan array JSON untuk menggambarkan informasi bidang.
Contoh:
Anda harus secara eksplisit menentukan set kolom yang akan disinkronkan untuk parameter column. Parameter ini tidak boleh kosong. | Ya | Tidak ada |
splitPk | Saat Databricks Reader mengekstrak data, jika Anda menentukan
| Tidak | Tidak ada |
where | Kondisi filter. Databricks Reader menggabungkan | Tidak | Tidak ada |
schema | Skema yang akan disinkronkan. | Ya | Tidak ada |
table | Tabel yang akan disinkronkan. Satu pekerjaan hanya dapat menyinkronkan satu tabel. | Ya | Tidak ada |
readMode | Mode pembacaan data. Saat ini, hanya mode JDBC yang didukung. | Tidak | jdbc |