Topik ini menjelaskan fitur dan keterbatasan sinkronisasi data dari sumber data Databricks di DataWorks.
Catatan penggunaan
Keterbatasan
Kelompok sumber daya: Databricks Reader hanya mendukung kelompok sumber daya Serverless. Anda juga harus mengonfigurasi gerbang NAT publik dan Elastic IP Address (EIP) untuk VPC yang terikat pada kelompok sumber daya tersebut.
Mode baca: Tugas sinkronisasi data hanya dapat membaca data dalam mode
JDBC.Tipe katalog dan keterbatasan fitur: Saat menguji konektivitas sumber data atau mengonfigurasi tugas sinkronisasi data dalam mode wizard, DataWorks menggunakan
databricks-sdkuntuk memanggil Databricks REST API. API ini hanya mendukung Unity Catalog. Jika Anda menggunakan katalog selain Unity Catalog, sepertihive_metastore, fitur-fitur tersebut tidak tersedia. Anda dapat menggunakan salah satu solusi berikut:Solusi 1 (Direkomendasikan): Migrasikan ke Unity Catalog. Seperti yang direkomendasikan oleh Databricks, migrasikan data dan metadata Anda ke Unity Catalog agar dapat memanfaatkan semua fitur yang disediakan oleh DataWorks. Untuk informasi lebih lanjut, lihat Migrate to Unity Catalog.
Solusi 2: Gunakan langsung mode skrip. Setelah mengonfigurasi sumber data di DataWorks, lewati langkah Test Connectivity dan konfigurasikan tugas sinkronisasi data dalam mode skrip.
Bacaan konkuren dan konsistensi data
Databricks Reader menggunakan parameter
splitPkuntuk partisi data, yang memulai beberapa tugas konkuren guna meningkatkan throughput sinkronisasi. Perhatikan hal-hal berikut:Tugas-tugas konkuren tersebut tidak berjalan dalam transaksi database yang sama dan memiliki interval waktu di antaranya.
Jika data terus-menerus ditulis ke sumber data, pembacaan konkuren dapat menghasilkan snapshot data yang tidak lengkap atau tidak konsisten.
Karena keterbatasan teknis, mencapai snapshot yang sepenuhnya konsisten melalui beberapa pembacaan konkuren adalah hal yang mustahil. Anda dapat menggunakan salah satu solusi berikut, tergantung pada kebutuhan bisnis Anda:
Solusi 1: Gunakan sinkronisasi single-threaded dan jangan mengonfigurasi partisi data dengan parameter
splitPk. Pendekatan ini menjamin konsistensi data yang ketat tetapi memperlambat proses sinkronisasi.Solusi 2: Pastikan sumber data bersifat statis selama sinkronisasi. Misalnya, gunakan penguncian tabel, hentikan sementara penulisan aplikasi, atau jeda sinkronisasi database standby. Metode ini lebih cepat tetapi dapat memengaruhi layanan online.
Pengkodean
Databricks Reader mengekstrak data menggunakan Java Database Connectivity (JDBC). JDBC secara otomatis mendeteksi dan mengonversi pengkodean karakter di berbagai database, sehingga Anda tidak perlu mengonfigurasi pengkodean secara manual.
Sinkronisasi data inkremental
Databricks Reader mengekstrak data dengan mengeksekusi pernyataan
SELECT ... WHERE .... Kunci untuk menerapkan sinkronisasi data inkremental adalah membangun klausaWHEREsecara tepat.Pendekatan yang direkomendasikan (berdasarkan kolom timestamp):
Rancang kolom timestamp, seperti
modify_time, di tabel database sumber Anda.Saat aplikasi Anda menambah atau memperbarui data (termasuk penghapusan logis), pastikan kolom timestamp tersebut diperbarui sesuai.
Dalam tugas sinkronisasi data, gunakan kolom timestamp ini dalam klausa
WHEREuntuk menarik data yang telah berubah sejak titik sinkronisasi terakhir.
Skenario yang tidak didukung: Jika sebuah tabel tidak memiliki kolom yang dapat membedakan catatan baru dari catatan yang dimodifikasi, seperti timestamp atau ID auto-increment, Databricks Reader tidak dapat melakukan sinkronisasi data inkremental. Dalam kasus ini, hanya sinkronisasi data penuh yang memungkinkan.
Tipe data yang didukung
Untuk pembacaan offline, Databricks Reader mendukung sebagian besar tipe data Databricks. Namun, beberapa tipe tidak didukung. Verifikasi tipe data Anda sebelum memulai.
Tabel berikut mencantumkan tipe data Databricks yang didukung oleh Databricks Reader.
Kategori | Tipe data Databricks |
Bilangan bulat | TINYINT, SMALLINT, INT, BIGINT |
Bilangan titik mengambang | FLOAT, DOUBLE, DECIMAL |
String | STRING |
Tanggal/waktu | DATE, TIMESTAMP, TIMESTAMP_NTZ |
Boolean | BOOLEAN |
Tipe kompleks | ARRAY, MAP, STRUCT |
Tipe lainnya | INTERVAL, BINARY, GEOGRAPHY(srid), GEOMETRY(srid) |
Buat sumber data
Sebelum mengembangkan tugas sinkronisasi data, buat sumber data yang sesuai di DataWorks. Untuk detailnya, lihat Data source management. Untuk deskripsi parameter secara rinci, lihat tooltip pada halaman konfigurasi.
Kembangkan tugas sinkronisasi data
Bagian ini menjelaskan cara mengonfigurasi tugas sinkronisasi data.
Sinkronisasi offline tabel tunggal
Untuk prosedurnya, lihat Configure an offline synchronization task in wizard mode dan Configure an offline synchronization task in script mode.
Untuk daftar lengkap parameter dan contoh skrip untuk Mode Skrip, lihat Appendix: Script sample and parameters.
FAQ
P: Saya mendapatkan kesalahan berikut saat membaca data:
[Databricks][JDBCDriver](500313)Kesalahan saat mengambil nilai data dari set hasil: Column13:[Databricks][JDBCDriver](500312)Kesalahan saat mengambil baris data: Konversi timestamp gagal.A: Rentang nilai tipe data Databricks TIMESTAMP melebihi rentang nilai Java Timestamp. Jika suatu nilai berada di luar rentang Java, driver JDBC akan mengembalikan error. Untuk mengatasi masalah ini, ubah parameter
column. Contoh:"column": ["CAST(col_timestamp AS STRING)"].
Lampiran: Contoh skrip dan parameter
Konfigurasi skrip untuk tugas offline
Jika Anda menggunakan mode skrip untuk mengonfigurasi tugas offline, Anda harus menentukan parameter dalam skrip tugas sesuai format yang ditentukan. Untuk informasi lebih lanjut, lihat Configure an offline synchronization task in script mode. Bagian berikut menjelaskan parameter Reader untuk mode skrip.
Contoh 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 | Bawaan |
datasource | Nama sumber data DataWorks Anda. | Ya | N/A |
column | Array nama kolom dari tabel sumber yang akan disinkronkan. Parameter ini ditentukan sebagai array JSON.
Contoh:
Anda harus secara eksplisit menentukan kolom yang akan disinkronkan. Parameter ini tidak boleh kosong. | Ya | N/A |
splitPk | Kolom yang digunakan untuk partisi data. Menentukan parameter ini mengaktifkan tugas konkuren, yang dapat meningkatkan throughput sinkronisasi.
| Tidak | N/A |
where | Kondisi filter untuk memilih data. DataWorks menggunakan parameter | Tidak | N/A |
schema | Schema yang akan disinkronkan. | Ya | N/A |
table | Tabel yang akan disinkronkan. Satu tugas hanya dapat menyinkronkan satu tabel. | Ya | N/A |
readMode | Mode pembacaan data. Hanya mode | Tidak | jdbc |