全部产品
Search
文档中心

DataWorks:Sumber data SQL Server

更新时间:Dec 16, 2025

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

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: ["*"].

  • Pemangkasan kolom didukung. Anda dapat memilih kolom tertentu untuk diekspor.

  • Pengubahan urutan kolom didukung. Anda dapat mengekspor kolom dalam urutan yang berbeda dari skema tabel.

  • Konfigurasi konstanta didukung. Anda harus menentukan konstanta dalam format sintaksis SQL MySQL. Misalnya, ["id", "table","1", "'john.doe'", "'null'", "to_char(a+1)", "2.3" , "true"] .

    • id adalah nama kolom biasa.

    • table adalah nama kolom yang berisi kata tercadang.

    • 1 adalah konstanta integer.

    • 'mingya.wmy' adalah konstanta string (perhatikan bahwa harus diapit tanda kutip tunggal).

    • 'null' adalah string.

    • to_char(a + 1) adalah ekspresi fungsi.

    • 2.3 adalah bilangan titik mengambang.

    • true adalah Nilai Boolean.

  • Parameter column harus menentukan kumpulan kolom yang akan disinkronkan dan tidak boleh kosong.

Yes

None

splitFactor

Faktor sharding. Anda dapat mengonfigurasi jumlah shard untuk sinkronisasi data. Jika Anda mengonfigurasi beberapa thread konkuren, data dibagi menjadi concurrency × splitFactor shard. Misalnya, jika concurrency adalah 5 dan splitFactor adalah 5, data dibagi menjadi 5 × 5 = 25 shard dan diproses oleh lima thread konkuren.

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 splitPk untuk melakukan sharding data berdasarkan field yang ditentukan. Hal ini memungkinkan sistem sinkronisasi data menjalankan task konkuren untuk menyinkronkan data, sehingga meningkatkan efisiensi.

  • Kami merekomendasikan penggunaan primary key tabel untuk splitPk. Primary key biasanya terdistribusi merata, yang membantu mencegah hotspot data di shard.

  • Saat ini, splitPk hanya mendukung sharding untuk field integer. Jika Anda menentukan field dengan tipe lain, seperti string, titik mengambang, atau tanggal, SQL Server Reader akan melaporkan error.

No

None

where

Kondisi filter. SQL Server Reader membuat pernyataan SQL berdasarkan parameter column, table, dan where yang ditentukan, lalu mengekstraksi data berdasarkan pernyataan SQL tersebut. Misalnya, untuk tujuan pengujian, Anda dapat mengatur kondisi where menjadi limit 10. Dalam skenario bisnis aktual, Anda mungkin menyinkronkan data hari ini dengan mengatur kondisi where menjadi gmt_create > ${bizdate}.

  • Kondisi where dapat digunakan untuk sinkronisasi data inkremental yang efisien.

  • Jika Anda membiarkan parameter where kosong, semua data dalam tabel akan disinkronkan.

No

None

querySql

Format: "querysql" : "query statement". Dalam beberapa skenario bisnis, parameter where tidak cukup untuk mendefinisikan kondisi filter. Anda dapat menggunakan parameter ini untuk menyesuaikan pernyataan SQL filter. Saat Anda mengonfigurasi parameter ini, sistem sinkronisasi data mengabaikan parameter tables dan columns serta menggunakan isi parameter ini untuk memfilter data. Misalnya, untuk menyinkronkan data setelah penggabungan tabel ganda, gunakan select a,b from table_a join table_b on table_a.id = table_b.id. Saat Anda mengonfigurasi querySql, SQL Server Reader mengabaikan parameter column, table, dan where.

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 fetchSize yang terlalu besar (> 2048) dapat menyebabkan error OOM dalam proses sinkronisasi data.

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, dan where yang Anda konfigurasi, SQL Server Reader menggabungkannya menjadi pernyataan SQL dan mengirimkannya ke database SQL Server.

  • Untuk informasi querySql yang 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: "column":["id","name","age"]. Untuk menulis data ke semua kolom secara berurutan, gunakan tanda bintang (*). Contoh: "column":["*"].

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 insert didukung. Jika terjadi konflik primary key atau unique index, Data Integration memperlakukan data tersebut sebagai data kotor tetapi mempertahankan data aslinya.

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