Data Integration memungkinkan Anda menggunakan Doris Reader untuk membaca data dari Doris dan Doris Writer untuk menulis data tabel ke Doris. Topik ini menjelaskan kemampuan DataWorks Data Integration dalam menyinkronkan data Doris.
Versi Doris yang didukung
Doris Writer menggunakan MySQL Driver 5.1.47. Versi kernel yang didukung oleh driver tersebut adalah sebagai berikut. Untuk informasi lebih lanjut mengenai kemampuan driver, lihat dokumentasi resmi Doris.
|
Doris version |
Supported |
|
0.x.x |
Yes |
|
1.1.x |
Yes |
|
1.2.x |
Yes |
|
2.x |
Yes |
Batasan penggunaan
Data Integration mendukung sinkronisasi data Doris secara offline (offline read dan offline write).
Tipe data yang didukung
Versi Doris yang berbeda mendukung tipe data dan model agregasi yang berbeda. Untuk informasi lengkap mengenai semua tipe data yang didukung di setiap versi Doris, lihat dokumentasi resmi Doris. Tabel berikut menjelaskan tipe data utama yang didukung.
|
Data type |
Supported model |
Doris version |
Offline write (Doris Writer) |
|
SMALLINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
INT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
BIGINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
LARGEINT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
FLOAT |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
DOUBLE |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
DECIMAL |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
DECIMALV3 |
Aggregate,Unique,Duplicate |
Versions later than 1.2.1, 2.x |
Yes |
|
DATE |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
DATETIME |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
DATEV2 |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
Yes |
|
DATETIMEV2 |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
Yes |
|
CHAR |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
VARCHAR |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
STRING |
Aggregate,Unique,Duplicate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
ARRAY |
Duplicate |
1.2.x, 2.x |
Yes |
|
JSON |
Aggregate,Unique,Duplicate |
1.2.x, 2.x |
Yes |
|
HLL |
Aggregate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
BITMAP |
Aggregate |
0.x.x, 1.1.x, 1.2.x, 2.x |
Yes |
|
QUANTILE_STATE |
Aggregate |
1.2.x, 2.x |
Yes |
Cara kerja
Doris Writer menulis data dengan menggunakan StreamLoad yang didukung secara native oleh Doris. Doris Writer menyimpan data yang dibaca oleh reader di memori, menggabungkannya menjadi teks, lalu mengimpor teks tersebut ke database Doris secara batch. Untuk informasi lebih lanjut, lihat dokumentasi resmi Doris.
Siapkan lingkungan ApsaraDB for OceanBase sebelum sinkronisasi data
Sebelum menggunakan DataWorks untuk menyinkronkan data ke sumber data Doris, Anda harus terlebih dahulu menyiapkan lingkungan Doris. Hal ini memastikan bahwa tugas sinkronisasi data dapat dikonfigurasi dan mampu menyinkronkan data ke sumber data Doris sesuai harapan. Informasi berikut menjelaskan cara menyiapkan lingkungan Doris untuk sinkronisasi data ke sumber data Doris.
Konfirmasi versi Doris
Data Integration memiliki persyaratan terhadap versi Doris. Anda dapat memeriksa apakah versi kluster Doris yang ingin Anda sinkronkan datanya memenuhi persyaratan berdasarkan bagian Versi Doris yang didukung. Anda dapat mengunduh versi tertentu dari situs web resmi Doris dan menginstalnya.
Buat akun dan berikan izin
Anda harus membuat akun yang digunakan untuk login ke database Doris guna operasi selanjutnya. Tentukan password untuk akun tersebut agar dapat terhubung ke database Doris. Jika Anda ingin menggunakan user root default Doris untuk login ke database Doris, Anda harus menentukan password untuk user root tersebut karena secara default user root tidak memiliki password. Anda dapat mengeksekusi pernyataan SQL di Doris untuk menentukan password:
SET PASSWORD FOR 'root' = PASSWORD('Password')
Konfigurasi koneksi jaringan untuk Doris
Untuk menggunakan metode StreamLoad dalam menulis data, Anda perlu mengakses alamat IP pribadi node FE. Jika Anda mengakses alamat IP publik node FE, Anda akan dialihkan ke alamat IP pribadi node BE. Untuk informasi lebih lanjut mengenai pengalihan ini, lihat Masalah operasi data. Dalam kasus ini, Anda harus membuat koneksi jaringan antara sumber data Anda dan serverless resource group atau grup sumber daya eksklusif untuk Data Integration agar resource group tersebut dapat mengakses sumber data melalui jaringan internal. Untuk informasi lebih lanjut mengenai cara membuat koneksi jaringan antara database Doris dan resource group, lihat Solusi konektivitas jaringan.
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk dalam Konfigurasi sumber data. Anda dapat melihat deskripsi parameter di konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Perhatikan persyaratan konfigurasi untuk item konfigurasi berikut pada sumber data Doris:
-
JdbcUrl: Masukkan string koneksi JDBC, yang mencakup alamat IP, nomor port, database, dan parameter koneksi. Alamat IP publik maupun pribadi didukung. Jika Anda menggunakan alamat IP publik, pastikan resource group Data Integration dapat mengakses host tempat instans Doris Anda berada.
-
FE endpoint: Masukkan alamat IP dan port node FE. Jika kluster Anda memiliki beberapa node FE, Anda dapat memasukkan beberapa endpoint yang dipisahkan koma, misalnya
ip1:port1,ip2:port2. Saat menguji koneksi, DataWorks menguji konektivitas ke semua FE endpoint yang ditentukan. -
Username: Masukkan username untuk mengakses database Doris.
-
Password: Masukkan password yang sesuai dengan username tersebut.
-
Advanced Parameters: Sumber data Doris mendukung berbagai parameter lanjutan yang memperluas konfigurasi koneksi. Misalnya, untuk menyesuaikan timeout kueri Java Database Connectivity (JDBC), tambahkan parameter
queryTimeoutke parameter lanjutan. Nilainya dalam satuan detik, danqueryTimeout=600mengatur timeout menjadi 600 detik. Setelah Anda mengatur parameter ini, parameter tersebut akan secara otomatis ditambahkan ke string koneksi JDBC.queryTimeouthanya berlaku di tingkat sumber data. Anda tidak dapat mengonfigurasiqueryTimeoutsecara terpisah untuk node sinkronisasi batch. Konfigurasikan secara terpusat di sumber data.
Kembangkan tugas sinkronisasi data
Untuk informasi mengenai titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
-
Untuk informasi lebih lanjut mengenai prosedur konfigurasi, lihat Konfigurasi tugas sinkronisasi batch menggunakan Antarmuka tanpa kode dan Konfigurasi tugas sinkronisasi batch menggunakan editor kode.
-
Untuk informasi mengenai semua parameter yang dikonfigurasi dan kode yang dijalankan saat menggunakan editor kode untuk mengonfigurasi tugas sinkronisasi batch, lihat Lampiran: Kode dan parameter.
Lampiran: Kode dan parameter
Konfigurasi tugas sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasi mode skrip. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Demo skrip Reader
{
"type": "job",
"version": "2.0",// Nomor versi.
"steps": [
{
"stepType": "doris",// Nama plug-in.
"parameter": {
"column": [// Nama kolom.
"id"
],
"connection": [
{
"querySql": [
"select a,b from join1 c join join2 d on c.id = d.id;"
],
"datasource": ""// Nama sumber data.
}
],
"where": "",// Klausul WHERE.
"splitPk": "",// Kunci shard.
"encoding": "UTF-8"// Format encoding.
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"// Jumlah maksimum catatan data kotor yang diizinkan.
},
"speed": {
"throttle": true,// Menentukan apakah pembatasan kecepatan diaktifkan. Nilai false berarti pembatasan kecepatan dinonaktifkan, dan nilai true berarti pembatasan kecepatan diaktifkan. Parameter mbps hanya berlaku ketika parameter throttle diatur ke true.
"concurrent": 1,// Jumlah maksimum thread paralel.
"mbps": "12"// Laju transmisi maksimum. Satuan: MB/s.
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Parameter skrip Reader
|
Parameter |
Description |
Required |
Default value |
|
datasource |
Nama sumber data. Harus sama dengan nama sumber data yang telah ditambahkan. Anda dapat menambahkan sumber data menggunakan editor kode. |
Yes |
No default value |
|
table |
Nama tabel dari mana Anda ingin membaca data. Setiap tugas sinkronisasi hanya dapat digunakan untuk menyinkronkan data dari satu tabel. Untuk tabel yang di-shard, Anda dapat menggunakan parameter table untuk menentukan partisi dari mana Anda ingin membaca data. Contoh:
Catatan
Doris Reader membaca data dari kolom yang ditentukan oleh parameter column di partisi yang ditentukan oleh parameter table. Jika partisi atau kolom yang ditentukan tidak ada, tugas sinkronisasi akan gagal. |
Yes |
No default value |
|
column |
Kolom yang ingin Anda sinkronkan. Kolom-kolom tersebut dijelaskan dalam array JSON. Secara default, semua kolom disinkronkan. Misalnya, gunakan
|
Yes |
No default value |
|
splitPk |
Untuk meningkatkan kinerja baca, Anda dapat menggunakan parameter splitPk untuk menentukan kunci shard. Data Integration menggunakan kunci ini untuk mempartisi data dan menjalankan tugas secara konkuren.
|
No |
No default value |
|
where |
Kondisi filter. Dalam banyak skenario bisnis, Anda mungkin hanya ingin menyinkronkan data dari hari ini. Untuk melakukan ini, Anda dapat menentukan kondisi where sebagai
|
No |
No default value |
|
querySql (parameter lanjutan, hanya tersedia di editor kode) |
Dalam beberapa skenario bisnis, parameter where mungkin tidak cukup untuk menggambarkan kondisi filter yang diinginkan. Anda dapat menggunakan parameter ini untuk menentukan kueri SQL kustom untuk filtering. Jika Anda mengonfigurasi parameter ini, Data Integration mengabaikan parameter table, column, where, dan splitPk, serta menggunakan kueri kustom untuk mengambil data. Misalnya, untuk menggabungkan beberapa tabel sebelum sinkronisasi, Anda dapat menggunakan kueri seperti Catatan
Nama parameter querySql bersifat case-sensitive. Misalnya, querysql tidak berlaku. |
No |
No default value |
Demo skrip Writer
{
"stepType": "doris",// Nama plug-in.
"parameter":
{
"postSql":// Pernyataan SQL yang ingin dieksekusi setelah tugas sinkronisasi dijalankan.
[],
"preSql":
[],// Pernyataan SQL yang ingin dieksekusi sebelum tugas sinkronisasi dijalankan.
"datasource":"doris_datasource",// Nama sumber data.
"table": "doris_table_name",// Nama tabel.
"column":
[
"id",
"table_id",
"table_no",
"table_name",
"table_status"
],
"loadProps":{
"column_separator": "\\x01",// Pemisah kolom data dalam format CSV.
"line_delimiter": "\\x02"// Pemisah baris data dalam format CSV.
}
},
"name": "Writer",
"category": "writer"
}
Parameter skrip Writer
|
Parameter |
Description |
Required |
Default value |
|
datasource |
Nama sumber data. Harus sama dengan nama sumber data yang telah ditambahkan. Anda dapat menambahkan sumber data menggunakan editor kode. |
Yes |
No default value |
|
table |
Nama tabel dari mana Anda ingin membaca data. |
Yes |
No default value |
|
column |
Kolom tujuan untuk menulis data. Tentukan nama kolom dalam bentuk array, misalnya |
Yes |
No default value |
|
preSql |
Pernyataan SQL yang dieksekusi sebelum tugas sinkronisasi data dimulai. Di Antarmuka tanpa kode, Anda hanya dapat mengeksekusi satu pernyataan SQL. Di editor kode, Anda dapat mengeksekusi beberapa pernyataan SQL. Misalnya, Anda dapat menggunakan pernyataan ini untuk menghapus data yang ada dari tabel. |
No |
No default value |
|
postSql |
Pernyataan SQL yang ingin dieksekusi setelah tugas sinkronisasi dijalankan. Misalnya, Anda dapat mengatur parameter ini ke pernyataan SQL yang digunakan untuk menambahkan timestamp. Anda hanya dapat mengeksekusi satu pernyataan SQL di Antarmuka tanpa kode dan beberapa pernyataan SQL di editor kode. |
No |
No default value |
|
maxBatchRows |
Jumlah maksimum baris yang dapat Anda tulis ke tabel tujuan sekaligus. Parameter ini dan parameter batchSize menentukan jumlah catatan data yang dapat Anda tulis ke tabel tujuan sekaligus. Setiap kali data yang di-cache mencapai nilai salah satu parameter tersebut, writer mulai menulis data ke tabel tujuan. |
No |
500000 |
|
batchSize |
Jumlah maksimum data yang dapat Anda tulis ke tabel tujuan sekaligus. Parameter ini dan parameter maxBatchRows menentukan jumlah catatan data yang dapat Anda tulis ke tabel tujuan sekaligus. Setiap kali data yang di-cache mencapai nilai salah satu parameter tersebut, writer mulai menulis data ke tabel tujuan. |
No |
104857600 |
|
maxRetries |
Jumlah maksimum percobaan ulang yang diizinkan setelah Anda gagal menulis beberapa catatan data ke tabel tujuan sekaligus. |
No |
3 |
|
labelPrefix |
Awalan label untuk setiap batch file yang diunggah. Label akhir merupakan kombinasi dari |
No |
datax_doris_writer_ |
|
loadProps |
Parameter permintaan untuk StreamLoad, terutama digunakan untuk mengonfigurasi format data impor. Secara default, data diimpor dalam format CSV. Jika parameter loadProps tidak dikonfigurasi, format CSV default digunakan, dengan
Jika Anda ingin menulis data dalam format JSON, gunakan pengaturan berikut:
|
No |
No default value |
Menulis data tipe agregat
Anda dapat menggunakan Doris Writer untuk menulis data tipe agregat, tetapi Anda harus melakukan konfigurasi tambahan di editor kode.
Misalnya, pada tabel Doris berikut, uuid bertipe bitmap (tipe agregasi) dan sex bertipe HLL (tipe agregasi).
CREATE TABLE `example_table_1` (
`user_id` int(11) NOT NULL,
`date` varchar(10) NOT NULL,
`city` varchar(10) NOT NULL,
`uuid` bitmap BITMAP_UNION, -- Tipe agregasi
`sex` HLL HLL_UNION -- Tipe agregasi
) ENGINE=OLAP AGGREGATE KEY(`user_id`, `date`, `city`)
COMMENT 'OLAP' DISTRIBUTED BY HASH(`user_id`) BUCKETS 32
Data mentah yang akan disinkronkan terdiri dari lima kolom, seperti ditunjukkan di bawah. Nilai dalam kolom uuid dan sex adalah nilai mentah (angka dan string biasa), bukan nilai bertipe bitmap atau HLL:
user_id,date,city,uuid,sex
0,T0S4Pb,abc,43,'54'
1,T0S4Pd,fsd,34,'54'
2,T0S4Pb,fa3,53,'64'
4,T0S4Pb,fwe,87,'64'
5,T0S4Pb,gbr,90,'56'
2,iY3GiHkLF,234,100,'54'
Nilai mentah tidak dapat langsung ditulis ke kolom bitmap atau HLL. Nilai-nilai tersebut harus dikonversi menggunakan fungsi agregat. Parameter columns pada Doris Stream Load dapat menyelesaikan konversi tersebut. Aturan pemetaannya adalah sebagai berikut: kolom dalam file dipetakan secara berurutan ke nama kolom yang tidak mengandung tanda sama dengan (=) dalam columns, sedangkan entri yang mengandung tanda sama dengan (=) merupakan transformasi ekspresi (nilai kolom tujuan dihitung dari ekspresi) dan tidak menempati posisi kolom file.
Oleh karena itu, pemetaan antara kolom file dan kolom tabel dalam contoh ini adalah sebagai berikut:
-
Kolom 1 hingga 3 dalam file (user_id, date, dan city): langsung ditulis ke kolom tabel dengan nama yang sama.
-
Kolom 4 dalam file (nilai mentah uuid): ditetapkan ke kolom placeholder sementara k1, dikonversi menjadi bitmap oleh ekspresi
uuid=bitmap_hash(k1), dan ditulis ke kolom tabel uuid. -
Kolom 5 dalam file (nilai mentah sex): ditetapkan ke kolom placeholder sementara k2, dikonversi menjadi nilai HLL oleh ekspresi
sex=hll_hash(k2), dan ditulis ke kolom tabel sex.
k1 dan k2 adalah nama placeholder sementara yang tidak ditulis ke tabel. Anda dapat mengganti nama tersebut dengan nama lain, asalkan nama yang dirujuk dalam ekspresi konsisten dengan nama kolom placeholder.
Saat menggunakan Doris Writer untuk menulis data tipe agregat, Anda harus menentukan kolom yang akan ditulis di writer.parameter.column dan mengonfigurasi aturan konversi di atas di writer.parameter.loadProps.columns. uuid dan sex di writer.parameter.column adalah nama bidang nilai mentah dalam catatan sinkronisasi. Mereka hanya menentukan bidang yang akan ditulis dan urutan penulisan. File CSV tidak berisi nama kolom, dan Stream Load mengidentifikasi kolom berdasarkan posisi. Oleh karena itu, Anda dapat menggunakan nama kustom untuk kolom keempat dan kelima dalam parameter columns (k1 dan k2 dalam contoh ini).
Kode contoh:
{
"stepType": "doris",
"parameter": {
"datasource": "doris_datasource",
"table": "example_table_1",
"column": [
"user_id",
"date",
"city",
"uuid",
"sex"
],
"loadProps": {
"format": "csv",
"column_separator": "\\x01",
"line_delimiter": "\\x02",
"columns": "user_id,date,city,k1,uuid=bitmap_hash(k1),k2,sex=hll_hash(k2)"
},
"preSql": [],
"postSql": []
},
"name": "Writer",
"category": "writer"
}