Sumber data SQL Server menyediakan saluran dua arah untuk membaca dan menulis data ke SQL Server. Topik ini menjelaskan kemampuan sinkronisasi data DataWorks untuk SQL Server.
Versi yang didukung
SQL Server Reader menggunakan driver com.microsoft.sqlserver sqljdbc4 4.0. Untuk informasi lebih lanjut mengenai kemampuan driver tersebut, lihat dokumentasi resmi. Driver ini mendukung versi SQL Server berikut:
Version | Didukung (Ya/Tidak) |
SQL Server 2016 | Yes |
SQL Server 2014 | Yes |
SQL Server 2012 | Yes |
PDW 2008R2 AU34 | Yes |
SQL Server 2008 R2 | Yes |
SQL Server 2008 | Yes |
SQL Server 2019 | No |
SQL Server 2018 | No |
Azure SQL Managed Instance | No |
Azure Synapse Analytics | No |
Azure SQL Database | Yes |
Batasan
Sinkronisasi offline mendukung pembacaan data dari view.
Tipe field yang didukung
Untuk daftar lengkap tipe field SQL Server, lihat dokumentasi Bantuan SQL Server. Tabel berikut mencantumkan tipe field umum yang didukung, dengan contoh berdasarkan SQL Server 2016.
SQL Server 2016 field type | SQL Server Reader | SQL Server Writer |
bigint | Supported | Supported |
bit | Supported | Supported |
decimal | Supported | Supported |
int | Supported | Supported |
money | Supported | Supported |
numeric | Supported | Supported |
smallint | Supported | Supported |
smallmoney | Support | Supported |
tinyint | Supported | Supported |
float | Supported | Supported |
real | Supported | Supported |
date | Supported | Supported |
datetime2 | Supported | Supported |
datetime | Supported | Supported |
datetimeoffset | Not supported | Not supported |
smalldatetime | Supported | Supported |
time | Supported | Supported |
char | Supported | Supported |
text | Supported | Support |
varchar | Supported | Support |
nchar | Supported | Supported |
ntext | Supported | Supported |
nvarchar | Supported | Supported |
binary | Supported | Support |
image | Supported | Supported |
varbinary | Supported | Support |
cursor | Not supported | Not supported |
hierarchyid | Not supported | Not supported |
sql_variant | Supported | Support |
Spatial Geometry Types | Not supported | Not supported |
table | Not supported | Not supported |
rowversion | Not supported | Not supported |
uniqueidentifier | Supported | Supported |
xml | Supported | Supported |
Spatial Geography Types | Not supported | Not supported |
Tabel berikut mencantumkan pemetaan tipe untuk SQL Server Reader dan SQL Server Writer.
Type category | SQL Server data type |
Integer | BIGINT, INT, SMALLINT, and TINYINT |
Floating-point | FLOAT, DECIMAL, REAL, and NUMERIC |
String | CHAR, NCHAR, NTEXT, NVARCHAR, TEXT, VARCHAR, NVARCHAR(MAX), and VARCHAR(MAX) |
Date and time | DATE, DATETIME, and TIME |
Boolean | BIT |
Binary | BINARY, VARBINARY, VARBINARY(MAX), and TIMESTAMP |
Tambahkan sumber data
Sebelum Anda mengembangkan task sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk dalam Data source management. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Kembangkan task sinkronisasi data
Untuk informasi mengenai titik masuk dan prosedur konfigurasi task sinkronisasi, lihat panduan konfigurasi berikut.
Konfigurasikan task sinkronisasi offline untuk satu tabel
Untuk petunjuknya, lihat Configure a task in the codeless UI dan Configure a task in the code editor.
Untuk daftar semua parameter dan demo skrip untuk editor kode, lihat Appendix: Script demo and parameters.
Konfigurasikan task sinkronisasi baca offline untuk seluruh database
Untuk petunjuknya, lihat Configure a real-time synchronization task for an entire database.
FAQ
Pemulihan data untuk sinkronisasi aktif/standby
Masalah sinkronisasi aktif/standby dapat terjadi ketika SQL Server menggunakan arsitektur disaster recovery aktif/standby. Dalam arsitektur ini, database secondary secara terus-menerus memulihkan data dari database primary menggunakan binlog. Terdapat jeda waktu dalam sinkronisasi data antara database primary dan secondary. Jeda ini bisa signifikan dalam situasi tertentu, seperti saat terjadi latensi jaringan. Akibatnya, data yang dipulihkan ke database secondary mungkin sangat berbeda dari data di database primary. Data yang disinkronkan dari database secondary bukan snapshot lengkap yang mutakhir.
Batasan konsistensi
SQL Server adalah Relational Database Management System (RDBMS) yang menyediakan antarmuka kueri data dengan konsistensi kuat. Misalnya, selama task sinkronisasi, SQL Server Reader tidak mengambil data yang telah diperbarui oleh transaksi lain. Hal ini disebabkan oleh fitur snapshot database.
Penjelasan di atas berlaku untuk konsistensi data SQL Server Reader dalam model single-threaded. SQL Server Reader dapat menggunakan ekstraksi data konkuren berdasarkan konfigurasi Anda. Oleh karena itu, konsistensi data yang kuat tidak dapat dijamin.
Setelah SQL Server Reader membagi data berdasarkan parameter splitPk, sistem menjalankan beberapa task konkuren untuk menyinkronkan data. Task-task konkuren ini tidak termasuk dalam transaksi baca yang sama dan dijalankan pada waktu yang berbeda. Akibatnya, data yang disinkronkan bukan snapshot data yang lengkap dan konsisten.
Saat ini belum tersedia solusi teknis untuk snapshot konsisten dalam lingkungan multi-threaded. Anda hanya dapat mengatasi masalah ini dari perspektif rekayasa. Metode rekayasa melibatkan pertukaran kompromi. Solusi berikut disediakan sebagai referensi. Anda dapat memilih solusi sesuai kebutuhan.
Gunakan sinkronisasi single-threaded tanpa sharding data. Kelemahannya adalah kecepatan sinkronisasi lambat, tetapi menjamin konsistensi.
Hentikan penulis data lain untuk memastikan data saat ini statis. Misalnya, Anda dapat mengunci tabel atau menghentikan sinkronisasi ke database secondary. Kelemahannya adalah hal ini dapat memengaruhi layanan online.
Encoding database
SQL Server Reader menggunakan Java Database Connectivity (JDBC) untuk mengekstraksi data. JDBC secara alami kompatibel dengan berbagai encoding dan melakukan konversi encoding di lapisan dasar. Oleh karena itu, Anda tidak perlu menentukan encoding untuk SQL Server Reader. Sistem akan otomatis mendapatkan dan mengonversi encoding tersebut.
Metode untuk sinkronisasi data inkremental
SQL Server Reader menggunakan pernyataan SELECT untuk mengekstraksi data. Anda dapat menggunakan pernyataan
SELECT…WHERE…untuk melakukan ekstraksi data inkremental. Metodenya sebagai berikut:Untuk aplikasi yang mengisi field modify dengan timestamp untuk catatan baru, diperbarui, atau dihapus secara logis, SQL Server Reader hanya memerlukan klausa WHERE yang menentukan timestamp sinkronisasi terakhir.
Untuk data transaksional baru, SQL Server Reader hanya memerlukan klausa WHERE yang menentukan ID auto-increment maksimum dari sinkronisasi sebelumnya.
Jika aplikasi Anda tidak memiliki field untuk membedakan data baru dan data yang dimodifikasi, SQL Server Reader tidak dapat melakukan sinkronisasi data inkremental. Dalam kasus ini, sistem hanya dapat menyinkronkan data penuh.
Keamanan SQL
SQL Server Reader menyediakan parameter querySql yang memungkinkan Anda membuat pernyataan SELECT untuk ekstraksi data. SQL Server Reader tidak melakukan pemeriksaan keamanan apa pun terhadap pernyataan querySql tersebut.
Lampiran: Demo skrip dan parameter
Konfigurasikan task sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi task sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Configure a task in the code editor. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi task sinkronisasi batch menggunakan editor kode.
Demo skrip Reader
{
"type":"job",
"version":"2.0",// The version number.
"steps":[
{
"stepType":"sqlserver",// The plugin name.
"parameter":{
"datasource":"",// The data source.
"column":[// The fields.
"id",
"name"
],
"where":"",// The filter condition.
"splitPk":"",// If you specify splitPk, the data is sharded based on the specified field.
"table":""// The data table.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// The number of error records.
},
"speed":{
"throttle":true,// If you set throttle to false, the mbps parameter does not take effect, and no rate limit is imposed. If you set throttle to true, a rate limit is imposed.
"concurrent":1, // The number of concurrent jobs.
"mbps":"12"// The rate limit. 1 mbps is equal to 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Jika Anda ingin menggunakan parameter querySql untuk menjalankan kueri, Anda dapat menggunakan skrip contoh berikut untuk bagian Reader. Dalam contoh ini, sumber data SQL Server adalah sql_server_source, tabel yang dikueri adalah dbo.test_table, dan kolom yang dikueri adalah name.
{
"stepType": "sqlserver",
"parameter": {
"connection": [
{
"querySql": ["select name from dbo.test_table"],
"datasource": "sql_server_source"
}
],
"datasource": "sql_server_source",
"column": ["name"],
"where": "",
"splitPk": "id"
},
"name": "Reader",
"category": "reader"
}Parameter skrip Reader
Parameter | Description | Required | Default value |
datasource | Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. | Yes | None |
table | Nama tabel tempat Anda ingin menyinkronkan data. Anda hanya dapat menyinkronkan data dari satu tabel dalam satu job. | Yes | None |
column | Kolom yang ingin Anda sinkronkan dari tabel sumber. Gunakan array JSON untuk menentukan informasi kolom. Secara default, semua kolom disinkronkan. Contoh: ["*"].
| Yes | None |
splitFactor | Faktor sharding. Anda dapat mengonfigurasi jumlah shard untuk sinkronisasi data. Jika Anda mengonfigurasi beberapa thread konkuren, data dibagi menjadi Catatan Nilai yang direkomendasikan adalah bilangan bulat antara 1 hingga 100. Nilai yang terlalu besar dapat menyebabkan error kehabisan memori (OOM). | No | 5 |
splitPk | Saat SQL Server Reader mengekstraksi data, Anda dapat menentukan parameter
| No | None |
where | Kondisi filter. SQL Server Reader membuat pernyataan SQL berdasarkan parameter
| No | None |
querySql | Format: | No | None |
fetchSize | Parameter ini menentukan jumlah catatan yang diambil dalam setiap batch dari server database. Nilai ini menentukan jumlah interaksi jaringan antara Data Integration dan server, yang dapat meningkatkan performa ekstraksi data. Catatan Nilai | No | 1024 |
driverVersion | Versi driver SQL Server. Nilai default adalah 4.0. Anda dapat mengatur parameter ini ke 12.10 untuk menggunakan versi yang mendukung autentikasi Active Directory Service Principal. | No | 4.0 |
Untuk informasi
table,column, danwhereyang Anda konfigurasi, SQL Server Reader menggabungkannya menjadi pernyataan SQL dan mengirimkannya ke database SQL Server.Untuk informasi
querySqlyang Anda konfigurasi, SQL Server mengirimkannya langsung ke database SQL Server.
Demo skrip Writer
{
"type":"job",
"version":"2.0",// The version number.
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"sqlserver",// The plugin name.
"parameter":{
"postSql":[],// The SQL statement that is executed after the data synchronization task.
"datasource":"",// The data source.
"column":[// The fields.
"id",
"name"
],
"table":"",// The table name.
"preSql":[]// The SQL statement that is executed before the data synchronization task.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// The number of error records.
},
"speed":{
"throttle":true,// If you set throttle to false, the mbps parameter does not take effect, and no rate limit is imposed. If you set throttle to true, a rate limit is imposed.
"concurrent":1, // The number of concurrent jobs.
"mbps":"12"// The rate limit. 1 mbps is equal to 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Parameter skrip Writer
Parameter | Description | Required | Default value |
datasource | Nama sumber data. Editor kode mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. | Yes | None |
table | Nama tabel tempat Anda ingin menyinkronkan data. | Yes | None |
column | Field di tabel tujuan tempat Anda ingin menulis data. Pisahkan field dengan koma (,). Contoh: | Yes | None |
preSql | Pernyataan SQL yang dijalankan sebelum task sinkronisasi data dijalankan. Di Antarmuka tanpa kode, Anda hanya dapat menjalankan satu pernyataan SQL. Di editor kode, Anda dapat menjalankan beberapa pernyataan SQL, seperti pernyataan untuk menghapus data lama. | No | None |
postSql | Pernyataan SQL yang dijalankan setelah task sinkronisasi data dijalankan. Di Antarmuka tanpa kode, Anda hanya dapat menjalankan satu pernyataan SQL. Di editor kode, Anda dapat menjalankan beberapa pernyataan SQL, seperti pernyataan untuk menambahkan timestamp. | No | None |
writeMode | Mode impor. Mode | No | insert |
batchSize | Jumlah catatan yang dikirimkan dalam setiap batch. Nilai yang lebih besar dapat secara signifikan mengurangi interaksi jaringan antara sistem sinkronisasi data dan SQL Server serta meningkatkan throughput keseluruhan. Jika nilai ini terlalu besar, error OOM dapat terjadi dalam proses sinkronisasi data. | No | 1.024 |
driverVersion | Versi driver SQL Server. Nilai default adalah 4.0. Anda dapat mengatur parameter ini ke 12.10 untuk menggunakan versi yang mendukung autentikasi Active Directory Service Principal. | No | 4.0 |