All Products
Search
Document Center

DataWorks:FAQ sinkronisasi batch

Last Updated:Jun 24, 2026

Topik ini membahas pertanyaan umum mengenai sinkronisasi batch.

Ikhtisar

Anda dapat menemukan masalah umum beserta solusinya dengan mencocokkan kata kunci.

Category

Keyword

Related Topic

Common O&M issues for batch synchronization tasks

Network connectivity

Mengapa pengujian konektivitas sumber data berhasil, tetapi tugas sinkronisasi batch gagal dengan error koneksi sumber data?

Switch resource group

Bagaimana cara mengganti grup sumber daya eksekusi untuk tugas sinkronisasi batch?

dirty data

Run timeout

Bagaimana cara mendiagnosis tugas sinkronisasi batch yang memerlukan waktu lama untuk dijalankan?

Apa yang harus dilakukan ketika tugas sinkronisasi data melambat karena full table scan akibat klausa WHERE yang tidak diindeks?

Retention of default values

Apakah Data Integration mempertahankan properti seperti nilai default dan batasan not-null saat membuat tabel tujuan?

shard key

Saat mengonfigurasi shard key untuk tugas sinkronisasi batch, apakah kunci primer komposit dapat digunakan sebagai shard key?

data loss

Apa yang harus saya lakukan jika data di tabel tujuan tidak konsisten dengan data di tabel sumber setelah sinkronisasi selesai?

Causes and solutions for non-plug-in errors

dirty data

Bagaimana cara menangani error dirty data yang disebabkan oleh pengaturan format encoding atau karakter rusak?

SSRF attack

Apa yang harus dilakukan ketika tugas melaporkan error "Task have SSRF attacks", yang mengindikasikan potensi serangan server-side request forgery (SSRF)?

Network connectivity

Apa yang harus dilakukan jika tugas sinkronisasi batch gagal secara intermiten?

Keyword in table/column name

Bagaimana menangani kegagalan tugas yang disebabkan oleh kata kunci dalam nama tabel atau kolom?

Adding a column

Apa yang harus saya lakukan jika kolom ditambahkan atau dimodifikasi di tabel sumber tugas sinkronisasi batch?

Writing date/time data

Saat menulis data tanggal/waktu ke file teks, bagaimana cara mempertahankan milidetik atau menentukan format tanggal/waktu kustom?

Causes and solutions for specific plug-in errors

MongoDB

OSS

Apakah ada batasan jumlah file yang dapat dibaca dari OSS sekaligus?

DataHub

Apa yang harus saya lakukan jika operasi penulisan ke DataHub gagal karena jumlah data yang ditulis dalam satu batch melebihi batas?

Lindorm

Saat menggunakan mode bulk Lindorm untuk menulis data, apakah data yang sudah ada diganti setiap kali?

Elasticsearch

Bagaimana cara mengkueri semua bidang dalam indeks Elasticsearch?

Tablestore Writer configuration

Bagaimana cara mengonfigurasi Tablestore Writer untuk menulis data ke tabel tujuan yang berisi kolom kunci utama auto-increment?

Time series model configuration

Dalam konfigurasi model time series, apa arti bidang _tag dan is_timeseries_tag?

Batch synchronization scenarios and solutions

Custom table name

Bagaimana cara menentukan nama tabel kustom untuk tugas sinkronisasi batch?

MaxCompute

Task configuration

Apa yang harus saya lakukan jika tidak semua tabel ditampilkan saat mengonfigurasi node sinkronisasi batch?

LogHub

Kafka

OSS

MySQL

Modify TTL

Dapatkah saya hanya menggunakan pernyataan ALTER untuk memodifikasi time-to-live (TTL) tabel yang telah disinkronisasi?

Function aggregation

Saat menyinkronisasi data menggunakan API, dapatkah saya menggunakan fungsi sisi sumber (misalnya, fungsi MaxCompute) untuk agregasi? Misalnya, dapatkah dua kolom, a dan b, dari tabel sumber digunakan sebagai kunci utama untuk Lindorm?

Elasticsearch

field mapping

Apa yang harus saya lakukan jika bidang dari sumber data tidak terstruktur tidak dapat dipetakan saat mengklik Pratinjau Data?

Error messages and solutions

Resource settings

OSS

Error "AccessDenied: The bucket you access does not belong to you." dilaporkan saat membaca data dari OSS.

Redis

Error "Code:[RedisWriter-04], Description:[Dirty data]. - source column number is in valid!" dilaporkan saat menulis data ke Redis menggunakan mode penyimpanan hash.

PostgreSQL

Error "org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery" dilaporkan saat membaca data dari PostgreSQL.

MySQL

Instance run conflict

Tugas sinkronisasi batch gagal dan melaporkan error: "Duplicate entry 'xxx' for key 'uk_uk_op'".

Network connectivity

Tugas sinkronisasi batch dengan sumber data MySQL gagal dengan error timeout "Communications link failure".

field mapping

Tugas sinkronisasi batch gagal dan melaporkan error: "plugin xx does not specify column".

MaxCompute

RESTful API

RESTful API Writer melaporkan error: "The JSON string found by path:[] is not an array."

RDS

Tugas sinkronisasi batch dengan sumber Amazon RDS gagal dengan error: "Host is blocked".

MongoDB

Elasticsearch

Hive

Error "Could not get block locations." dilaporkan saat menyinkronisasi data ke instans Hive lokal.

Run timeout

Tugas sinkronisasi batch dengan sumber MongoDB gagal dan melaporkan error: "MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit."

Masalah konektivitas jaringan

Kegagalan koneksi tugas

  • Jika pengujian konektivitas jaringan sebelumnya berhasil, jalankan kembali pengujian tersebut. Verifikasi bahwa grup sumber daya masih dapat terhubung ke database dan konfigurasi database tidak berubah.

  • Verifikasi bahwa tugas menggunakan grup sumber daya yang sama dengan yang lolos pengujian konektivitas jaringan.

    Untuk memeriksa grup sumber daya yang digunakan oleh tugas:

    • Jika tugas dijalankan pada grup sumber daya default, log berisi informasi berikut:running in Pipeline[basecommon_ group_xxxxxxxxx]

    • Jika tugas dijalankan pada grup sumber daya eksklusif untuk Integrasi Data, log berisi informasi berikut:running in Pipeline[basecommon_S_res_group_xxx]

    • Jika tugas dijalankan pada grup sumber daya Serverless, log berisi informasi berikut:running in Pipeline[basecommon_Serverless_res_group_xxx]

  • Jika tugas terjadwal gagal secara intermiten di pagi hari tetapi berhasil saat dijalankan ulang, periksa beban database pada saat error terjadi.

Kegagalan tugas secara intermiten

Tugas sinkronisasi batch dapat gagal secara intermiten jika konfigurasi daftar putih alamat IP tidak lengkap. Verifikasi bahwa daftar putih alamat IP database telah dikonfigurasi sepenuhnya.

Jika Anda menggunakan grup sumber daya eksklusif untuk Integrasi Data:

  • Jika Anda telah menambahkan alamat IP dari elastic network interfaces (ENIs) grup sumber daya eksklusif Anda untuk Integrasi Data ke daftar putih alamat IP sumber data, Anda harus memperbarui daftar putih tersebut dengan alamat IP ENI baru saat memperluas kapasitas grup sumber daya.

  • Untuk menghindari pembaruan daftar putih setelah memperluas kapasitas, kami menyarankan agar Anda menambahkan seluruh Blok CIDR dari vSwitch untuk grup sumber daya eksklusif Anda untuk Integrasi Data ke daftar putih alamat IP database. Untuk informasi lebih lanjut, lihat Konfigurasi daftar putih alamat IP.

Jika Anda menggunakan grup sumber daya Serverless, lihat Konfigurasi daftar putih alamat IP untuk memverifikasi konfigurasi daftar putih dan memastikan pengaturan jaringan Anda benar.

Jika daftar putih alamat IP telah dikonfigurasi dengan benar, periksa apakah beban database yang tinggi mengganggu koneksi.

Masalah konfigurasi sumber daya

[TASK_MAX_SLOT_EXCEED]:Unable to find a gateway that meets resource requirements. 20 slots are requested, but the maximum is 16 slots.

  • Penyebab:

    Jumlah thread paralel yang ditentukan melebihi sumber daya yang tersedia.

  • Solusi:

    Kurangi jumlah thread paralel untuk tugas sinkronisasi batch.

    • Jika Anda mengonfigurasi tugas sinkronisasi batch di antarmuka tanpa kode, kurangi parameter Expected Maximum Concurrency di bagian kebijakan kontrol channel. Untuk informasi lebih lanjut, lihat Konfigurasi tugas menggunakan antarmuka tanpa kode.

    • Jika Anda mengonfigurasi tugas sinkronisasi batch dalam mode skrip, kurangi parameter concurrent di bagian kebijakan kontrol channel skrip Anda. Untuk informasi lebih lanjut, lihat Konfigurasi tugas dalam mode skrip.

OutOfMemoryError: Java heap space

Untuk mengatasi masalah ini, lakukan salah satu atau beberapa hal berikut:

  1. Jika konfigurasi reader atau writer mencakup parameter batchsize atau maxfilesize, kurangi nilainya.

    Untuk memeriksa apakah reader atau writer Anda mendukung parameter ini, lihat Sumber data, reader, dan writer yang didukung dan klik reader atau writer tertentu untuk melihat parameternya.

  2. Kurangi jumlah thread paralel.

    • Jika Anda mengonfigurasi tugas sinkronisasi batch di antarmuka tanpa kode, kurangi parameter Expected Maximum Concurrency di bagian kebijakan kontrol channel. Untuk informasi lebih lanjut, lihat Konfigurasi tugas menggunakan antarmuka tanpa kode.

    • Jika Anda mengonfigurasi tugas sinkronisasi batch dalam mode skrip, kurangi parameter concurrent di bagian kebijakan kontrol channel skrip Anda. Untuk informasi lebih lanjut, lihat Konfigurasi tugas dalam mode skrip.

  3. Jika Anda menyinkronisasi file, seperti objek Object Storage Service (OSS), baca lebih sedikit file dalam setiap tugas.

  4. Di bagian Running Resources konfigurasi tugas, tingkatkan Resource Usage (CU). Atur nilai CU dengan hati-hati untuk menghindari dampak pada tugas lain yang sedang berjalan.

Konflik konkurensi instans

Error tugas batch: Duplicate entry 'xxx' for key 'uk_uk_op'

  • Gejala: Pesan error berikut dikembalikan: Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'cfc68cd0048101467588e97e83ffd7a8-0' for key 'uk_uk_op'.

  • Penyebab: Integrasi Data tidak mengizinkan beberapa instans dari node yang sama berjalan secara konkuren. Dengan kata lain, beberapa instans tugas sinkronisasi yang memiliki konfigurasi JSON yang sama tidak dapat berjalan secara bersamaan. Misalnya, untuk tugas sinkronisasi yang dijadwalkan berjalan setiap 5 menit, keterlambatan hulu dapat menyebabkan instans yang dijadwalkan pukul 00:00 dan instans yang dijadwalkan pukul 00:05 keduanya dimulai pada pukul 00:05. Konflik ini mencegah salah satu instans dimulai. Masalah ini juga dapat terjadi jika Anda mengisi ulang data untuk suatu instans atau menjalankannya ulang saat instans tersebut sedang berjalan.

  • Solusi: Atur waktu mulai instans agar tidak bersamaan. Untuk tugas tingkat jam atau menit, konfigurasikan dependensi mandiri sehingga instans hanya dimulai setelah instans dari siklus sebelumnya selesai. Di DataWorks (klasik), lihat dependensi mandiri. Di DataWorks (baru), lihat dependensi lintas siklus.

Galat Waktu Habis

Error timeout sumber MongoDB

  • Gejala: Tugas sinkronisasi batch gagal dengan pesan error: MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit.

  • Penyebab: Tugas menarik jumlah data yang berlebihan selama pemuatan penuh.

  • Solusi:

    • Tingkatkan konkurensi.

    • Kurangi nilai BatchSize.

    • Tambahkan parameter cursorTimeoutInMs ke pengaturan reader dan atur ke nilai yang lebih besar, seperti 3.600.000 ms.

Tugas sinkronisasi batch yang menggunakan MySQL sebagai sumber data melaporkan error timeout koneksi: Communications link failure

  • Error baca

    • Gejala:

      Saat Anda membaca data, error berikut dilaporkan: Communications link failure The last packet successfully received from the server was 7,200,100 milliseconds ago. The last packet sent successfully to the server was 7,200,100 milliseconds ago. - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    • Penyebab:

      Eksekusi kueri SQL yang lambat di database menyebabkan timeout baca MySQL.

    • Solusi:

      • Periksa apakah klausa WHERE dikonfigurasi dan pastikan kolom yang difilter diindeks.

      • Periksa apakah tabel sumber berisi volume data yang besar. Jika demikian, pertimbangkan untuk membagi tugas menjadi beberapa tugas yang lebih kecil.

      • Periksa log untuk mengidentifikasi pernyataan SQL yang menyebabkan kemacetan, dan konsultasikan dengan administrator basis data Anda untuk menyelesaikan masalah tersebut.

  • Error tulis

    • Gejala:

      Saat menulis data, tugas gagal dengan error berikut: Caused by: java.util.concurrent.ExecutionException: ERR-CODE: [TDDL-4614][ERR_EXECUTE_ON_MYSQL] Error occurs when execute on GROUP 'xxx' ATOM 'dockerxxxxx_xxxx_trace_shard_xxxx': Communications link failure The last packet successfully received from the server was 12,672 milliseconds ago. The last packet sent successfully to the server was 12,013 milliseconds ago. More...

    • Penyebab:

      Kueri lambat mengakibatkan timeout soket. Default socketTimeout untuk koneksi TDDL adalah 12 detik. Jika pernyataan SQL memerlukan waktu lebih dari 12 detik untuk dieksekusi di server MySQL dan mengembalikan hasil, TDDL melaporkan error 4614. Error ini dapat terjadi secara intermiten dengan volume data besar atau saat server sibuk.

    • Solusi:

      • Jalankan ulang tugas sinkronisasi setelah kinerja database stabil.

      • Hubungi administrator basis data Anda untuk menyesuaikan pengaturan timeout.

Tugas berjalan lama

Penyebab 1: Waktu eksekusi lama

  • Pernyataan SQL pra-eksekusi atau pasca-eksekusi yang berjalan lama, seperti preSql dan postSql, dapat memperlambat tugas.

  • Konfigurasi shard key yang tidak tepat dapat memperlambat tugas.

    Tugas sinkronisasi batch menggunakan shard key (splitPk) untuk mempartisi data. Integrasi Data kemudian memulai subtugas konkuren berdasarkan konfigurasi ini untuk meningkatkan efisiensi sinkronisasi. Lihat dokumentasi plugin Anda untuk menentukan apakah plugin tersebut memerlukan shard key.

Solusi 1:

  • Jika Anda mengonfigurasi pernyataan SQL pra-eksekusi atau pasca-eksekusi, gunakan kolom yang diindeks untuk penyaringan data.

  • Jika plugin mendukung shard key, konfigurasikan dengan tepat. Misalnya, saat Anda mengonfigurasi shard key untuk reader MySQL, pertimbangkan hal berikut:

    • Gunakan kunci utama tabel sebagai splitPk. Kunci utama biasanya memiliki distribusi yang seragam, yang membantu mencegah hotspot data.

    • Saat ini, splitPk hanya mendukung tipe data integer untuk sharding. Tipe string, float, dan date tidak didukung. Jika Anda menentukan tipe data yang tidak didukung, sinkronisasi berjalan pada satu thread.

    • Jika Anda tidak menentukan splitPk atau membiarkannya kosong, tugas menyinkronisasi data pada satu thread.

Penyebab 2: Menunggu sumber daya runtime Integrasi Data

Solusi 2: Jika log menunjukkan status WAIT yang berkepanjangan, grup sumber daya eksklusif untuk Integrasi Data tidak memiliki slot konkuren yang cukup untuk menjalankan tugas. Untuk detail lebih lanjut tentang penyebab dan solusi, lihat Mengapa tugas Integrasi Data selalu menunjukkan status 'wait'?.

Catatan

Tugas sinkronisasi batch dikirim dari grup sumber daya untuk penjadwalan ke grup sumber daya eksklusif untuk Integrasi Data. Oleh karena itu, setiap tugas mengonsumsi satu sumber daya penjadwalan. Jika tugas berjalan lama tidak melepaskan sumber dayanya, tugas tersebut dapat memblokir tidak hanya tugas sinkronisasi batch lain tetapi juga jenis tugas terjadwal lainnya.

Klausa WHERE tidak diindeks

  • Contoh skenario

    Contoh pernyataan SQL:

    SELECT bid,inviter,uid,createTime FROM `relatives` WHERE createTime>='2016-10-2300:00:00' AND reateTime<'2016-10-24 00:00:00';

    Kueri dimulai pada 2016-10-25 11:01:24.875 dan mulai mengembalikan hasil pada 2016-10-25 11:11:05.489. Tugas menunggu database mengembalikan hasil kueri, menyebabkan penundaan signifikan sebelum MaxCompute dapat melanjutkan.

  • Penyebab

    Kolom createTime yang digunakan dalam klausa WHERE tidak diindeks, yang memaksa pemindaian tabel penuh.

  • Solusi

    Gunakan kolom yang diindeks dalam klausa WHERE untuk meningkatkan kinerja. Jika perlu, tambahkan indeks ke kolom tersebut.

Ganti grup sumber daya

Grup sumber daya untuk sinkronisasi batch

Untuk versi sebelumnya dari Pengembangan Data:

Di DataStudio, Anda dapat mengubah grup sumber daya untuk debugging tugas sinkronisasi batch di halaman detailnya. Di Operation Center, Anda dapat mengubah grup sumber daya Integrasi Data untuk eksekusi terjadwal. Untuk detailnya, lihat Ganti grup sumber daya Integrasi Data.

Untuk versi baru Pengembangan Data:

Di DataStudio, Anda dapat mengubah grup sumber daya untuk debugging tugas Integrasi Data. Di Operation Center, Anda dapat mengubah grup sumber daya Integrasi Data untuk eksekusi terjadwal. Untuk detailnya, lihat O&M grup sumber daya.

Dirty data

Mendiagnosis dirty data

Catatan data dianggap sebagai dirty data jika gagal ditulis ke sumber data tujuan karena error.

Dampak: Dirty data tidak ditulis ke tujuan. Secara default, Integrasi Data mengizinkan dirty data. Anda dapat mengontrol perilaku ini dengan menetapkan jumlah maksimum catatan dirty data yang diizinkan dalam konfigurasi tugas sinkronisasi batch. Untuk informasi lebih lanjut, lihat konfigurasi antarmuka tanpa kode.

  • Mengizinkan dirty data: Jika Anda mengonfigurasi tugas untuk mengizinkan dirty data, tugas tersebut terus berjalan saat menemui dirty data. Namun, catatan-catatan ini dibuang dan tidak ditulis ke tujuan.

  • Kontrol jumlah catatan data kotor yang diizinkan:

    • Jika Anda menetapkan ambang batas ke 0, tugas gagal dan berhenti segera saat menemukan catatan dirty data pertama.

    • Jika Anda menetapkan ambang batas ke nilai x, tugas gagal dan berhenti jika jumlah catatan dirty data melebihi x. Jika jumlahnya tidak melebihi x, tugas berlanjut, tetapi membuang catatan dirty data tersebut alih-alih menulisnya ke tujuan.

Analisis skenario dirty data:

  • Skenario 1:

    • Gejala: Tugas mengembalikan pesan error berikut: {"message":"Dirty data was found when writing to the destination MaxCompute table: An error occurred in the data of the [3rd] field. Check the data and correct it, or you can increase the threshold to ignore this record.","record":[{"byteSize":0,"index":0,"type":"DATE"},{"byteSize":0,"index":1,"type":"DATE"},{"byteSize":1,"index":2,"rawData":0,"type":"LONG"},{"byteSize":0,"index":3,"type":"STRING"},{"byteSize":1,"index":4,"rawData":0,"type":"LONG"},{"byteSize":0,"index":5,"type":"STRING"},{"byteSize":0,"index":6,"type":"STRING"}]}.

    • Solusi: Log menunjukkan error pada bidang ketiga.

      • Writer melaporkan error dirty data ini. Periksa pernyataan pembuatan tabel di tujuan. Error ini biasanya terjadi ketika ukuran bidang yang ditentukan untuk tabel MaxCompute tujuan lebih kecil daripada ukuran data bidang yang sesuai di tabel sumber MySQL.

      • Prinsip sinkronisasi data: Data sumber harus dapat ditulis ke tujuan, artinya tipe data dan ukuran bidang harus kompatibel. Misalnya, Anda tidak dapat menulis data VARCHAR ke kolom INT. Ukuran tipe data tujuan harus cukup besar untuk menampung data dari bidang sumber yang dipetakan. Untuk data sumber bertipe LONG, VARCHAR, atau DOUBLE, Anda dapat menggunakan tipe data tujuan dengan rentang yang lebih besar, seperti STRING atau TEXT.

      • Jika pesan error dirty data tidak jelas, salin catatan dirty data lengkap dari log. Bandingkan nilainya dengan tipe kolom tujuan untuk mengidentifikasi bidang yang tidak sesuai.

      Contoh:

      {"byteSize":28,"index":25,"rawData":"ohOM71vdGKqXOqtmtriUs5QqJsf4","type":"STRING"}

      byteSize: Jumlah byte. index: 25, yang menunjukkan bidang ke-26. rawData: Nilai aktual. type: Tipe data.

  • Skenario 2:

    • Gejala: DataX melaporkan dirty data saat membaca nilai NULL dari MySQL.

    • Solusi: Periksa apakah tipe data bidang sumber kompatibel dengan tipe data bidang tujuan yang dipetakan. Ketidakcocokan akan menyebabkan error. Misalnya, menulis nilai null dari bidang sumber bertipe STRING ke bidang tujuan bertipe INT akan gagal.

Lihat dirty data

Untuk menemukan informasi tentang dirty data, buka halaman detail log dan klik tautan di sebelah Detail log url untuk melihat log sinkronisasi batch.查看日志

Retensi data saat melebihi batas

Tugas menghitung catatan dirty data saat berjalan. Jika jumlah ini melebihi ambang batas yang dikonfigurasi, tugas berhenti segera.

  • Retensi data: Tujuan mempertahankan semua data yang berhasil ditulis sebelum tugas berhenti. Sistem tidak melakukan rollback.

  • Kebijakan toleransi nol: Jika Anda menetapkan ambang batas dirty data ke 0, tugas gagal dan berhenti segera setelah mendeteksi catatan dirty data pertama.

Encoding dan karakter rusak

  • Gejala:

    Jika data Anda mencakup emoji, error dirty data serupa berikut dapat terjadi selama sinkronisasi: [13350975-0-0-writer] ERROR StdoutPluginCollector - Dirty data {"exception":"Incorrect string value: '\\xF0\\x9F\\x98\\x82\\xE8\\xA2...' for column 'introduction' at row 1","record":[{"byteSize":8,"index":0,"rawData":9642,"type":"LONG"}],"type":"writer"} .

  • Penyebab yang mungkin:

    • Encoding database bukan utf8mb4, yang diperlukan untuk menyinkronisasi emoji dengan benar.

    • Data sumber itu sendiri berisi karakter rusak.

    • Format encoding database berbeda dari format encoding klien.

    • Encoding browser berbeda dari encoding database atau klien, yang menyebabkan kegagalan pratinjau atau karakter rusak.

  • Solusi:

    Pilih solusi berdasarkan akar penyebabnya:

    • Jika data sumber Anda berisi karakter rusak, perbaiki data sumber terlebih dahulu, lalu jalankan tugas sinkronisasi batch.

    • Jika database dan klien menggunakan format encoding yang berbeda, konfigurasikan agar menggunakan format yang sama.

    • Jika encoding browser berbeda, atur agar sesuai dengan encoding database dan klien sebelum Anda mempratinjau data.

    Anda juga dapat mencoba hal berikut:

    1. Untuk sumber data yang ditambahkan melalui URL JDBC, tambahkan pengaturan utf8mb4 ke URL: jdbc:mysql://xxx.x.x.x:3306/database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45

    2. Untuk sumber data yang ditambahkan dalam mode instans Alibaba Cloud, tambahkan berikut ke nama database: database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45.

    3. Ubah encoding database ke utf8mb4. Misalnya, ubah encoding database untuk instans ApsaraDB RDS di konsol ApsaraDB RDS.

      Catatan

      Untuk mengatur format encoding untuk sumber data ApsaraDB RDS, jalankan set names utf8mb4. Untuk melihat format encoding database ApsaraDB RDS, jalankan show variables like 'char%'.

Retensi nilai default

Nilai default dan properti

Saat DataWorks membuat tabel tujuan, hanya nama kolom, tipe data, dan komentar dari tabel sumber yang dipertahankan. Properti lain, seperti nilai default dan batasan (termasuk batasan not-null dan indeks), tidak dipertahankan.

Shard key

Kunci utama komposit

Tidak, kunci utama komposit tidak dapat digunakan sebagai shard key untuk tugas sinkronisasi batch.

Kehilangan data

Ketidaksesuaian data

Jika Anda menemukan masalah kualitas data setelah sinkronisasi data, lihat Troubleshooting masalah kualitas data dalam sinkronisasi offline.

Serangan SSRF

Task have SSRF attacks

T: Bagaimana cara mengatasi error "Task have SSRF attacks"?

Penyebab: Untuk keamanan, DataWorks memblokir tugas dari penggunaan alamat IP publik untuk mengakses alamat jaringan internal. Kontrol ini dipicu jika URL dalam konfigurasi plugin, seperti HTTP Reader, mengarah ke alamat IP pribadi atau nama domain VPC.

Pendekatan yang direkomendasikan:

Solusi: Untuk menjalankan tugas pada sumber data internal, gunakan grup sumber daya Serverless (direkomendasikan) atau grup sumber daya eksklusif untuk Integrasi Data alih-alih grup sumber daya publik.

Menulis data tanggal dan waktu

Format tanggal kustom

Beralihlah ke mode skrip untuk tugas sinkronisasi dan tambahkan konfigurasi berikut di bawah kunci common di halaman konfigurasi tugas:

"common": {
  "column": {
    "dateFormat": "yyyyMMdd",
    "datetimeFormatInNanos": "yyyyMMdd HH:mm:ss.SSS"
  }
}

image.png

Parameter:

  • dateFormat: Menentukan format teks untuk nilai DATE sumber, yang tidak mencakup jam, menit, atau detik.

  • datetimeFormatInNanos: Menentukan format teks untuk nilai DATETIME atau TIMESTAMP sumber. Format ini mendukung presisi milidetik.

MaxCompute

Pemetaan bidang sumber

  1. Anda dapat memasukkan konstanta. Nilainya harus diapit tanda kutip tunggal, seperti 'abc' atau '123'.

  2. Anda dapat menggunakan parameter penjadwalan, seperti '${bizdate}'. Untuk informasi lebih lanjut, lihat Format yang Didukung untuk Parameter Penjadwalan.

  3. Anda dapat memasukkan kolom kunci partisi untuk disinkronisasi, seperti pt.

  4. Jika nilai yang Anda masukkan tidak dapat diurai, tipenya ditampilkan sebagai 'custom'.

  5. Fungsi MaxCompute tidak didukung.

  6. Tugas masih dapat berjalan sebagaimana mestinya meskipun kolom yang ditambahkan secara manual diklasifikasikan sebagai 'custom'. Hal ini dapat terjadi dengan kolom kunci partisi MaxCompute atau kolom yang tidak terlihat dalam pratinjau data LogHub.

Menyinkronisasi kolom kunci partisi

Di daftar pemetaan bidang, di bawah kolom bidang sumber, klik Add or Create Field. Masukkan nama kolom kunci partisi (misalnya, pt), lalu petakan ke bidang tujuan.

image

Menyinkronisasi data dari beberapa partisi

Tentukan partisi dari mana data akan dibaca.

  • Konfigurasi partisi untuk ODPS mendukung wildcard shell Linux. Tanda bintang (*) mewakili nol atau lebih karakter, dan tanda tanya (?) mewakili satu karakter.

  • Secara default, partisi yang ditentukan harus ada; jika tidak, tugas melaporkan error. Untuk mengizinkan tugas berhasil meskipun partisi hilang, atur opsi When partitions do not exist, ke abaikan. Atau, beralih ke mode skrip dan tambahkan "successOnNoPartition": true ke konfigurasi Parameter untuk ODPS.

Misalnya, tabel terpartisi bernama test berisi empat partisi: pt=1,ds=hangzhou, pt=1,ds=shanghai, pt=2,ds=hangzhou, dan pt=2,ds=beijing. Anda dapat mengonfigurasi tugas untuk membaca dari partisi yang berbeda sebagai berikut:

  • Untuk membaca data dari partisi pt=1,ds=hangzhou, tentukan "partition":"pt=1,ds=hangzhou".

  • Untuk membaca data dari semua partisi ds dalam partisi pt=1, tentukan "partition":"pt=1,ds=*".

  • Untuk membaca data dari semua partisi di tabel test, tentukan "partition":"pt=*,ds=*".

Anda juga dapat mengatur kondisi untuk menyaring partisi. Operasi berikut memerlukan mode skrip.

  • Untuk membaca data dari partisi terbaru berdasarkan kunci partisinya, Anda dapat menambahkan konfigurasi seperti /*query*/ ds=(select MAX(ds) from DataXODPSReaderPPR).

  • Untuk menyaring partisi berdasarkan kondisi, Anda dapat menambahkan ekspresi seperti /*query*/ pt+expression. Misalnya, /*query*/ pt>=20170101 and pt<20170110 membaca data dari semua partisi pt dari 1 Januari 2017 (inklusif) hingga 10 Januari 2017 (eksklusif).

Catatan

Konten yang mengikuti /*query*/ diperlakukan sebagai klausa WHERE.

Menyaring, mengurutkan ulang, dan mengisi kolom

Dengan mengonfigurasi MaxCompute Writer, Anda dapat melakukan operasi yang tidak didukung MaxCompute sendiri, seperti penyaringan kolom, pengurutan ulang, dan pengisian nilai null. Misalnya, untuk mengimpor semua bidang, Anda dapat mengatur konfigurasi ke "column": ["*"].

Jika tabel MaxCompute memiliki tiga kolom, a, b, dan c, dan Anda ingin menyinkronisasi data hanya ke kolom c dan b, Anda dapat mengonfigurasi kolom sebagai "column": ["c","b"]. Konfigurasi ini memetakan kolom pertama dan kedua dari reader ke kolom c dan b di tabel MaxCompute, masing-masing. Di baris yang baru dimasukkan, kolom a diatur ke null.

Error konfigurasi kolom

Untuk mencegah kehilangan data, MaxCompute Writer melaporkan error jika Anda mencoba menulis lebih banyak kolom daripada yang dimiliki tabel tujuan.

Konfigurasi partisi

MaxCompute Writer hanya dapat menulis data ke partisi tingkat terendah. Fitur ini tidak mendukung fitur seperti routing data ke partisi berdasarkan nilai bidang. Jika tabel memiliki tiga tingkat partisi, Anda harus menentukan jalur lengkap ke partisi tingkat ketiga dalam konfigurasi partisi. Misalnya, untuk menulis data ke partisi tingkat ketiga, Anda dapat menentukan pt=20150101, type=1, biz=2. Anda tidak dapat menentukan partisi tingkat menengah seperti pt=20150101, type=1 atau pt=20150101.

Pengulangan ulang tugas dan failover

MaxCompute Writer memastikan idempotensi tulis dengan konfigurasi "truncate": true. Saat tugas dijalankan ulang setelah kegagalan, pertama-tama menghapus data yang sebelumnya ditulis sebelum mengimpor data baru, menjamin konsistensi. Namun, jika pengecualian lain mengganggu tugas, atomisitas tidak dijamin: data tidak dikembalikan dan tugas tidak dijalankan ulang secara otomatis. Anda harus menjalankan ulang tugas secara manual, memanfaatkan idempotensi untuk memastikan integritas data.

Catatan

Jika Anda mengatur truncate ke true, semua data di partisi atau tabel yang ditentukan dihapus. Gunakan pengaturan ini dengan hati-hati.

Error baca: The download session is expired.

  • Gejala

    Code:DATAX_R_ODPS_005:Failed to read ODPS data, Solution:[Please contact the ODPS administrator]. RequestId=202012091137444331f60b08cda1d9, ErrorCode=StatusConflict, ErrorMessage=The download session is expired.

  • Penyebab yang mungkin

    Tugas sinkronisasi batch menggunakan layanan MaxCompute Tunnel untuk mengunggah dan mengunduh data. Sesi Tunnel memiliki siklus hidup 24 jam di server. Jika tugas sinkronisasi batch berjalan lebih dari 24 jam, sesi kedaluwarsa dan tugas gagal. Untuk informasi lebih lanjut tentang Tunnel, lihat Catatan penggunaan.

  • Solusi

    Tingkatkan jumlah thread paralel untuk tugas dan rencanakan volume data untuk memastikan sinkronisasi batch selesai dalam 24 jam.

Error tulis: Error writing request body to server

  • Gejala

    Code:[OdpsWriter-09], Description:[Failed to write data to the ODPS destination table.]. - Failed to write block:0 to the ODPS destination table, uploadId=[202012081517026537dc0b0160354b]. Please contact the ODPS administrator for assistance. - java.io.IOException: Error writing request body to server.

  • Penyebab yang mungkin

    • Tipe data salah: Data sumber tidak sesuai dengan spesifikasi tipe data ODPS. Misalnya, Anda tidak dapat menulis nilai 4.2223 ke kolom bertipe DECIMAL(18,10) di ODPS.

    • Masalah blok ODPS atau error komunikasi.

  • Solusi

    Pastikan data sumber sesuai dengan spesifikasi tipe data tujuan. Jika perlu, konversi data ke tipe yang didukung.

MySQL

Menyinkronisasi tabel ter-shard

Untuk instruksi konfigurasi, lihat Menyinkronisasi data dari database dan tabel ter-shard.

Memperbaiki karakter rusak

Saat menambahkan sumber data dengan string koneksi, modifikasi format JDBC ke jdbc:mysql://xxx.x.x.x:3306/database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45. Untuk informasi lebih lanjut, lihat Tambahkan sumber data MySQL.

Error baca/tulis: Application was streaming results when the connection failed. Consider raising value of 'net_write_timeout/net_read_timeout' on the server.

  • Penyebab:

    • net_read_timeout: Saat Integrasi Data membaca data dari ApsaraDB RDS untuk MySQL, kueri dibagi menjadi beberapa pernyataan SELECT berdasarkan shard key (splitPk). Error ini terjadi jika waktu eksekusi salah satu pernyataan tersebut melebihi waktu eksekusi maksimum yang diizinkan di instans ApsaraDB RDS.

    • net_write_timeout: Error ini terjadi jika waktu untuk mengirim blok data ke klien melebihi timeout yang dikonfigurasi.

  • Solusi:

    Anda dapat menambahkan parameter ke URL JDBC sumber data atau memodifikasinya di konsol ApsaraDB RDS.

  • Rekomendasi:

    Jika tugas dapat dijalankan ulang dengan aman, aktifkan pengulangan ulang tugas otomatis.

数据源参数设置

Contoh: jdbc:mysql://192.168.1.1:3306/lizi?useUnicode=true&characterEncoding=UTF8&net_write_timeout=72000

Error selama sinkronisasi batch ke MySQL: [DBUtilErrorCode-05]ErrorMessage: Code:[DBUtilErrorCode-05]Description:[Failed to write data to the destination table that you configured.]. - com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed

Penyebab:

Di MySQL, parameter wait_timeout memiliki nilai default 8 jam. Jika tugas sinkronisasi masih mengambil data saat timeout ini tercapai, tugas terganggu.

Solusi:

Modifikasi file konfigurasi my.cnf di server MySQL Anda (atau my.ini di Windows). Di bagian MySQL, tambahkan parameter berikut dengan nilai dalam detik: wait_timeout=2592000 interactive_timeout=2592000. Setelah Anda menyimpan perubahan, mulai ulang layanan MySQL, login ke MySQL, dan jalankan perintah show variables like '%wait_time%' untuk memverifikasi pengaturan baru.

Error baca: The last packet successfully received from the server was 902,138 milliseconds ago

Error ini dapat terjadi jika koneksi terputus karena penggunaan memori tinggi, meskipun pemanfaatan CPU normal.

Jika tugas dapat dijalankan ulang dengan aman, aktifkan pengulangan ulang otomatis saat error. Untuk informasi lebih lanjut, lihat properti waktu.

PostgreSQL

Error baca PostgreSQL: org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery

  • Gejala: Tugas sinkronisasi batch yang membaca data dari database PostgreSQL gagal dengan error berikut: org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery

  • Penyebab: Error ini terjadi pada instans PostgreSQL standby saat kueri berjalan lama bertentangan dengan proses pemulihan database. Server menghentikan kueri karena melebihi batas waktu yang ditetapkan oleh parameter max_standby_archive_delay atau max_standby_streaming_delay. Untuk mengatasi ini, tingkatkan nilai parameter ini untuk memberikan lebih banyak waktu bagi kueri agar selesai. Untuk informasi lebih lanjut, lihat Standby Server Events.

RDS

Error Host is blocked

Jika koneksi ke sumber data Amazon RDS Anda mengembalikan error Host is blocked, nonaktifkan pemeriksaan kesehatan load balancing Amazon untuk mencegah error ini terjadi berulang.

MongoDB

Error saat menggunakan pengguna root

Saat Anda menambahkan sumber data MongoDB, Anda harus menggunakan pengguna yang dibuat di database yang berisi koleksi yang ingin Anda sinkronisasi. Anda tidak dapat menggunakan pengguna root.

Misalnya, jika Anda ingin mengimpor koleksi name dari database test, Anda harus menggunakan pengguna yang dibuat di database test.

Sinkronisasi inkremental dengan timestamp

Anda dapat menggunakan node assignment untuk mengonversi nilai tanggal ke timestamp dan menggunakannya sebagai parameter input untuk tugas sinkronisasi MongoDB. Untuk informasi lebih lanjut, lihat Bagaimana cara melakukan sinkronisasi inkremental untuk bidang timestamp di MongoDB?

Waktu salah setelah sinkronisasi

Atur zona waktu dalam konfigurasi MongoDB Reader. Untuk informasi lebih lanjut, lihat MongoDB Reader.

Pembaruan sumber tidak disinkronisasi

Mulai ulang tugas setelah interval, biarkan semua konfigurasi lainnya tidak berubah.

Kepekaan huruf besar/kecil MongoDB Reader

Ya. Saat data dibaca, Column.name yang Anda konfigurasi peka terhadap huruf besar/kecil. Jika huruf besar/kecil yang dikonfigurasi tidak cocok dengan sumber, data dibaca sebagai null. Misalnya:

  • Data sumber di MongoDB:

    {
        "MY_NAME": "zhangsan"
    }
  • Konfigurasi kolom dalam tugas sinkronisasi:

    {
        "column":
        [
            {
                "name": "my_name"
            }
        ]
    }

Ketidakcocokan ini menyebabkan error pembacaan data.

Konfigurasi timeout MongoDB Reader

Parameter timeout adalah cursorTimeoutInMs. Nilai defaultnya adalah 600.000 ms (10 menit). Parameter ini menentukan waktu eksekusi kueri maksimum di server MongoDB, tidak termasuk waktu transfer data. Jika Anda membaca jumlah data yang besar dalam sinkronisasi penuh, error berikut dapat terjadi: MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit.

Error baca: no master

Tugas sinkronisasi saat ini tidak mendukung pembacaan dari instans sekunder. Mengonfigurasi tugas untuk membaca dari instans sekunder menyebabkan error no master.

Error baca: MongoExecutionTimeoutException: operation exceeded time limit

  • Penyebab:

    Terjadi timeout kursor.

  • Solusi:

    Tingkatkan nilai parameter cursorTimeoutInMs.

Error sinkronisasi batch: DataXException: operation exceeded time limit

Tingkatkan jumlah thread paralel dan ukuran batch untuk tugas.

Error tugas sinkronisasi: no such cmd splitVector

  • Penyebab yang mungkin:

    Secara default, tugas sinkronisasi menggunakan perintah splitVector untuk slicing tugas. Namun, beberapa versi MongoDB tidak mendukung perintah splitVector, yang menyebabkan error no such cmd splitVector.

  • Solusi:

    1. Di halaman konfigurasi tugas sinkronisasi, klik ikon Convert to Script 转换脚本 di bilah alat atas untuk memasuki mode skrip.

    2. Dalam konfigurasi parameter MongoDB, tambahkan parameter.

      "useSplitVector" : false

      Untuk menghindari penggunaan splitVector.

Error bidang _id immutable diubah

  • Gejala:

    Masalah ini terjadi dalam tugas sinkronisasi batch saat Write Mode (Overwrite) diatur ke Yes dan Business Key yang dikonfigurasi bukan bidang _id.写入模式报错

  • Penyebab yang mungkin:

    Data yang akan ditulis berisi entri di mana _id tidak cocok dengan Business Key yang dikonfigurasi (seperti my_id dari contoh konfigurasi sebelumnya).

  • Solusi:

    • Solusi 1: Di data sumber Anda, pastikan nilai bidang Business Key cocok dengan nilai bidang _id.

    • Solusi 2: Ubah konfigurasi tugas untuk menggunakan bidang _id sebagai business key.

Redis

Error tulis mode hash: Code:[RedisWriter-04], Description:[Dirty data]. - source column number is in valid!

  • Penyebab:

    Saat menyimpan data di Redis menggunakan mode hash, atribut dan nilai harus muncul berpasangan. Misalnya, jika sumber Anda dikonfigurasi dengan odpsReader: "column":[ "id", "name", "age", "address" ] dan writer Redis tujuan dikonfigurasi dengan RedisWriter: "keyIndexes":[ 0, 1], kolom id dan name digunakan sebagai kunci. Kolom yang tersisa, age dan address, kemudian menjadi atribut dan nilai untuk hash. Jika sumber hanya menyediakan dua kolom, dan keduanya ditentukan sebagai kunci, tidak ada kolom yang tersisa untuk membentuk pasangan atribut-nilai, menyebabkan error ini.

  • Solusi:

    Jika Anda hanya perlu menggunakan dua kolom, konfigurasikan Redis untuk menggunakan mode string. Jika Anda harus menggunakan mode hash, pastikan sumber menyediakan setidaknya tiga kolom: satu untuk kunci, satu untuk atribut, dan satu untuk nilai.

OSS

Delimiter multi-karakter di CSV

  • Gejala:

    Saat membaca dari layanan penyimpanan file seperti OSS atau FTP, tugas sinkronisasi batch mungkin gagal dengan error dirty data. Masalah ini terjadi jika file sumber dalam format CSV dan menggunakan delimiter multi-karakter, seperti |,, ##, atau ;;. Log eksekusi tugas akan menunjukkan IndexOutOfBoundsException dan error dirty data.

  • Penyebab:

    Reader csv bawaan ("fileFormat": "csv") di DataWorks tidak dapat memproses delimiter multi-karakter dengan benar, yang menyebabkan pemisahan kolom salah.

  • Solusi:

    • Mode wizard: Ganti tipe file ke teks dan tentukan secara eksplisit delimiter multi-karakter Anda.

    • Mode skrip: Ubah "fileFormat": "csv" ke "fileFormat": "text" dan atur delimiter dengan parameter berikut: "fieldDelimiter":"<your_multi-character_delimiter>", "fieldDelimiterOrigin":"<your_multi-character_delimiter>".

Batas file OSS

Reader OSS tidak membatasi jumlah file yang dapat Anda baca dalam tugas sinkronisasi batch. Batasan utama berasal dari unit komputasi (CU) yang dikonsumsi oleh tugas. Membaca terlalu banyak file sekaligus dapat menyebabkan error kehabisan memori. Untuk mencegah error OutOfMemoryError: Java heap space , hindari mengatur parameter objek ke *.

Menghapus string acak dalam nama file

OSS Writer mensimulasikan struktur direktori dengan menggunakan nama file objek yang ditulis. Misalnya, jika Anda menentukan "object": "datax", nama objek yang dihasilkan dimulai dengan datax dan ditambahkan dengan string acak. Jumlah subtugas dalam tugas sinkronisasi batch menentukan jumlah file yang dibuat.

Untuk menghindari sufiks UUID acak, atur "writeSingleObject" : "true". Untuk informasi lebih lanjut, lihat deskripsi writeSingleObject dalam dokumentasi sumber data OSS.

Error OSS: AccessDenied

  • Penyebab:

    AccessKey untuk sumber data tidak memiliki izin yang diperlukan untuk bucket.

  • Solusi:

    Berikan izin baca pada bucket ke AccessKey yang digunakan untuk sumber data OSS.

Hive

Error: Could not get block locations

  • Penyebab:

    Error ini dapat terjadi jika nilai parameter mapred.task.timeout terlalu rendah. Saat timeout tercapai, Hadoop menghentikan tugas dan membersihkan direktori sementara. Tugas kemudian gagal karena tidak dapat menemukan data sementara.

  • Solusi:

    Dalam pengaturan sumber data tugas sinkronisasi batch, jika Anda mengatur Hive read methods ke Read data using Hive JDBC (supports conditional filtering), Anda dapat meningkatkan nilai parameter mapred.task.timeout di bagian Session Configuration. Misalnya, atur parameter ke mapred.task.timeout=600000.

DataHub

Kegagalan muatan berlebih

  • Gejala:

    Anda menerima pesan error serupa berikut:ERROR JobContainer - Exception when job runcom.alibaba.datax.common.exception.DataXException: Code:[DatahubWriter-04], Description:[Failed to write data.]. - com.aliyun.datahub.exception.DatahubServiceException: Record count 12498 exceed max limit 10000 (Status Code: 413; Error Code: TooLargePayload; Request ID: 20201201004200a945df0bf8e11a42)

  • Penyebab:

    Error ini terjadi karena data dalam satu permintaan DataX melebihi batas layanan DataHub. Parameter berikut mengontrol ukuran setiap komitmen batch:

    • Parameter maxCommitSize mengatur ukuran maksimum data, dalam megabyte (MB), yang dibuffer DataX sebelum meng-commit batch ke tujuan. Nilai defaultnya adalah 1 MB, yaitu 1.048.576 byte.

    • Parameter batchSize mengatur jumlah catatan maksimum yang dibuffer DataX sebelum meng-commit batch ke tujuan.

  • Solusi:

    Untuk mengatasi masalah ini, kurangi parameter maxCommitSize dan batchSize.

LogHub

Bidang kosong setelah sinkronisasi

Bidang plugin ini peka terhadap huruf besar/kecil. Periksa konfigurasi column di reader LogHub.

Data hilang setelah sinkronisasi

Integrasi Data mengambil data berdasarkan waktu kedatangannya di LogHub. Di konsol LogHub, verifikasi bahwa bidang metadata receive_time data berada dalam rentang waktu yang dikonfigurasi tugas.

Bidang tak terduga dalam pemetaan

Jika hal ini terjadi, edit manual column di UI.

Mengapa nilai __time__ yang dibaca berada di luar rentang waktu yang dikonfigurasi, atau mengapa jumlah catatan di konsol tidak cocok dengan jumlah entri yang dibaca oleh tugas sinkronisasi untuk rentang waktu yang sama?

Waktu mulai dan akhir yang dikonfigurasi untuk tugas sinkronisasi batch digunakan oleh Reader untuk memanggil API SLS GetCursor untuk menentukan kursor awal dan akhir. Waktu-waktu ini digunakan untuk menentukan rentang baca berdasarkan waktu penerimaan server SLS. Tugas benar-benar membaca data dalam rentang kursor. Ini tidak setara dengan penyaringan berdasarkan bidang output __time__.

Bidang output __time__ berasal dari log.getTime() untuk setiap log dan mewakili timestamp log itu sendiri. Kueri di konsol SLS biasanya berdasarkan rentang waktu kueri, pernyataan kueri, dan bidang yang diindeks, dengan waktu log __time__ menjadi referensi waktu umum. Oleh karena itu, meskipun tugas sinkronisasi dan kueri konsol menggunakan nilai waktu yang sama, rentang __time__ yang diambil atau jumlah catatan mungkin tidak konsisten jika mereka menggunakan referensi waktu yang berbeda.

Skenario umum meliputi:

  1. Jika ada penundaan dalam pengumpulan atau pengiriman log, log historis dikirim ulang, atau waktu klien tidak akurat, waktu log__time__ mungkin lebih awal atau lebih lambat daripada waktu penerimaan server SLS. Karena tugas sinkronisasi menentukan posisi kursor berdasarkan waktu penerimaan server dan konsol mengkueri data berdasarkan __time__, hasil dari keduanya mungkin berbeda.

  2. Saat Anda menggunakan pemrosesan data SLS untuk menulis data ke LogStore lain, jika pernyataan pemrosesan data tidak secara eksplisit mengatur __time__, __time__ log tujuan biasanya mempertahankan timestamp log sumber, bukan waktu eksekusi tugas pemrosesan data. Dalam kasus ini, tugas sinkronisasi mungkin membaca log ini dalam rentang waktu saat ditulis ke LogStore tujuan. Namun, Anda mungkin tidak menemukan log ini saat mengkueri konsol LogStore tujuan berdasarkan waktu eksekusi pemrosesan atau rentang waktu saat ini. Anda harus mengkueri berdasarkan rentang waktu yang sesuai dengan __time__ aktual log.

  3. Jumlah catatan mungkin berbeda jika pernyataan kueri konsol, bidang yang diindeks, rentang waktu, dan pernyataan filter aturan (SPL) dalam tugas sinkronisasi tidak konsisten, meskipun kerangka waktu keseluruhan sama.

Saran troubleshooting:

  1. Pastikan rentang waktu kueri, pernyataan, dan bidang yang diindeks di konsol cocok dengan waktu mulai, waktu akhir, dan aturan filter (SPL) tugas sinkronisasi.

  2. Di column, keluarkan baik __time__ (waktu log) maupun __tag__:__receive_time__ (bidang yang dapat diamati untuk waktu penerimaan sisi server SLS yang harus ada di tag log), untuk membandingkan waktu log dengan waktu penerimaan sisi server;

  3. Jika data berasal dari pemrosesan data SLS, verifikasi bahwa pernyataan pemrosesan secara eksplisit mengatur __time__, dan sesuaikan rentang waktu kueri di konsol untuk LogStore tujuan sesuai dengan __time__ aktual.

  4. Jika sistem hilir Anda memerlukan rekonsiliasi ketat berdasarkan waktu log, Anda dapat menyaring atau melakukan statistik berdasarkan __time__ setelah menulis ke target.

Misalnya, __time__ log sumber adalah 2026-06-01 10:00:00. Tugas pemrosesan data SLS menulis log ke LogStore tujuan pada 2026-06-12 10:00:00, dan pernyataan pemrosesan tidak secara eksplisit memodifikasi __time__. Dalam kasus ini, __time__ log tujuan masih 2026-06-01 10:00:00. Jika waktu mulai dan akhir yang dikonfigurasi untuk tugas sinkronisasi mencakup 2026-06-12 10:00:00, tugas mungkin membaca log ini. Namun, saat Anda mengkueri LogStore tujuan di konsol, Anda mungkin tidak menemukan log jika Anda memilih rentang waktu sekitar 2026-06-12 10:00:00 dan konsol menyaring log berdasarkan __time__. Dalam kasus ini, Anda harus menyesuaikan waktu kueri di konsol ke rentang waktu sekitar 2026-06-01 10:00:00 atau secara eksplisit mengatur __time__ log tujuan selama pemrosesan data berdasarkan kebutuhan bisnis Anda.

Bidang kosong setelah sinkronisasi

Reader mencocokkan nama bidang dari konten log yang diambil, pemetaan bidang metadata bawaannya, dan LogTag berdasarkan konfigurasi column. Nama bidang peka terhadap huruf besar/kecil, dan jika tidak ditemukan kecocokan, Reader mengeluarkan null tanpa melaporkan error.

Penyebab umum meliputi:

  1. Huruf besar/kecil nama bidang yang dikonfigurasi di column tidak cocok dengan huruf besar/kecil kunci bidang log asli.

  2. Konsol menampilkan alias, bidang yang diindeks, atau bidang JSON yang diperluas, yang berbeda dari kunci log mentah yang diterima reader.

  3. Bidang berasal dari LogTag dan harus dikonfigurasi sebagai __tag__:<tagKey>.

  4. Setelah Anda mengonfigurasi pernyataan filter aturan (SPL) atau konfigurasi pemrosesan, nama bidang output yang diproses tidak persis cocok dengan column.

Saat troubleshooting, Anda dapat terlebih dahulu menggunakan Source Field dan Data Preview di halaman visual untuk mengonfirmasi bidang yang benar-benar dikenali oleh Reader. Dalam mode skrip, Anda juga dapat sementara mengatur column ke ["*"], amati kunci bidang untuk konten log umum yang diambil Reader, lalu konfigurasi column menggunakan kunci asli.

Lindorm

Penggantian data tulis massal

Logika tulis identik dengan panggilan API. Data di baris dan kolom yang cocok ditimpa, meninggalkan semua data lainnya tidak berubah.

Elasticsearch

Kueri semua bidang dalam indeks

Anda dapat menggunakan perintah curl untuk mendapatkan pemetaan untuk indeks ES. Anda kemudian dapat mengekstrak semua definisi bidang dari pemetaan tersebut.

  • Perintah shell kueri:

    // Untuk ES 7.x
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/_mapping'
    // Untuk ES 6.x
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/typename/_mapping'
  • Contoh respons:

    {
        "indexname": {
            "mappings": {
                "typename": {
                    "properties": {
                        "field1": {
                            "type": "text"
                        },
                        "field2": {
                            "type": "long"
                        },
                        "field3": {
                            "type": "double"
                        }
                    }
                }
            }
        }
    }

    Dalam respons, objek properties berisi semua bidang dan definisi propertinya untuk indeks. Dalam contoh ini, indeks berisi tiga bidang: field1, field2, dan field3.

Menyinkronisasi dengan nama indeks dinamis

Anda dapat menggunakan variabel penjadwalan berbasis tanggal dalam konfigurasi indeks Anda. Hal ini memungkinkan sistem menghasilkan nama indeks secara dinamis berdasarkan tanggal eksekusi. Proses ini melibatkan tiga langkah: mendefinisikan variabel tanggal, mengonfigurasi variabel indeks, dan menerapkan serta menjalankan tugas.

  1. Definisikan variabel tanggal: Dalam pengaturan penjadwalan untuk tugas sinkronisasi, tambahkan parameter baru untuk mendefinisikan variabel tanggal. Dalam contoh berikut, var1 mewakili waktu eksekusi tugas (hari ini), dan var2 mewakili tanggal bisnis (hari sebelumnya).定义日期变量

  2. Konfigurasi variabel indeks: Beralih ke mode skrip dan konfigurasikan indeks untuk Elasticsearch Reader. Gunakan format ${variable_name}, seperti yang ditunjukkan pada gambar berikut.配置索引变量

  3. Terapkan dan jalankan tugas: Setelah Anda memverifikasi tugas, commit dan terapkan ke Operation Center. Anda kemudian dapat menjalankannya berdasarkan jadwal atau menggunakan fitur pengisian ulang data.

    1. Klik Running with Parameters untuk menjalankan dan menguji tugas. Tindakan ini mengganti parameter penjadwalan dalam konfigurasi dengan nilai aktual. Setelah tugas berjalan, periksa log untuk memverifikasi bahwa indeks yang benar digunakan.

      Catatan

      Saat Anda menggunakan Run with Parameters, masukkan nilai parameter secara langsung untuk menguji.

      运行运行

    2. Jika hasil pengujian sesuai harapan, konfigurasi tugas selesai. Klik Save lalu Commit untuk commit tugas sinkronisasi ke lingkungan produksi.提交任务

      Jika proyek Anda dalam mode standar, Anda harus klik Deploy untuk membuka pusat deployment dan menerapkan tugas sinkronisasi ke lingkungan produksi.发布

  4. Hasil: Contoh berikut menunjukkan konfigurasi dan nama indeks aktual yang digunakan saat runtime.

    Konfigurasi indeks dalam mode skrip: "index": "esstress_1_${var1}_${var2}".

    Nama indeks yang digunakan saat runtime: esstress_1_20230106_20230105.

    运行结果

Menyinkronisasi properti bidang object atau nested

Untuk menyinkronisasi properti bidang object, Anda harus menggunakan mode skrip. Dalam mode skrip, konfigurasikan parameter multi seperti yang ditunjukkan dalam kode berikut dan tentukan jalur kolom menggunakan notasi titik, misalnya, property.child_property.

"multi":{
   "multi":true 
 }

Contoh berikut menunjukkan konfigurasinya:

# Contoh:
## Data di ES
"hits": [
    {
        "_index": "mutiltest_1",
        "_type": "_doc",
        "_id": "7XAOOoMB4GR_1Dmrrust",
        "_score": 1.0,
        "_source": {
            "level1": {
                "level2": [
                    {
                        "level3": "testlevel3_1"
                    },
                    {
                        "level3": "testlevel3_2"
                    }
                ]
            }
        }
    }
]
## Konfigurasi reader
"parameter": {
  "column": [
      "level1",
      "level1.level2",
      "level1.level2[0]"
  ],
  "multi":{
        "multi":true
    }
}
## Hasil di tujuan: satu baris dengan tiga kolom, dalam urutan yang sama seperti konfigurasi reader.
COLUMN              VALUE
level1:             {"level2":[{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}]}
level1.level2:      [{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}]
level1.level2[0]:   {"level3":"testlevel3_1"}

Menangani tanda kutip string dan sinkronisasi JSON-ke-nested

  1. Tanda kutip ganda di sekitar string adalah artefak tampilan di Kibana. Data aktual di Elasticsearch tidak memiliki tanda kutip tambahan ini. Anda dapat menggunakan perintah curl atau alat seperti Postman untuk melihat data mentah. Perintah curl untuk mendapatkan data adalah sebagai berikut:

    // Untuk ES 7.x
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/_search'
    // Untuk ES 6.x
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/typename/_search'

    结果

  2. Ya, Anda dapat mengonfigurasi tipe bidang tujuan ES sebagai nested untuk menyinkronisasi string JSON dari MaxCompute ke objek nested di ES. Contoh berikut menunjukkan cara menyinkronisasi bidang name ke format nested di ES.

    • Konfigurasi sinkronisasi: Atur type bidang name ke nested.同步配置

    • Hasil sinkronisasi: Bidang name adalah objek nested.同步结果

Jika data sumber adalah string "[1,2,3,4,5]", bagaimana cara menyimpannya sebagai array di ES?

Untuk menulis data sebagai array ke ES, Anda dapat menggunakan salah satu dari dua metode berdasarkan format data sumber Anda.

  • Uraikan data sumber sebagai array JSON. Jika data sumber Anda adalah "[1,2,3,4,5]", atur json_array=true untuk mengurai data sumber. Hal ini menulis data sebagai array ke bidang ES. Atur json_array=true dalam konfigurasi kolom.

    • Konfigurasi di antarmuka tanpa kode:向导模式配置

    • Konfigurasi dalam mode skrip:

      "column":[
        {
          "name":"docs",
          "type":"keyword",
          "json_array":true
        }
      ]
  • Uraikan data sumber menggunakan delimiter. Jika data sumber Anda adalah "1,2,3,4,5", konfigurasikan splitter="," untuk mengurai string dan menulisnya sebagai array ke bidang ES.

    • Batasan:

      • Setiap tugas hanya mendukung satu splitter (delimiter). Anda tidak dapat mengonfigurasi delimiter berbeda untuk bidang array berbeda. Misalnya, jika Anda memiliki kolom sumber col1="1,2,3,4,5" dan col2="6-7-8-9-10", Anda tidak dapat menentukan splitter berbeda untuk setiap kolom.

      • splitter dapat berupa ekspresi reguler. Misalnya, jika nilai kolom sumber adalah "6-,-7-,-8+,*9-,-10", Anda dapat mengatur splitter ke "[-,*+]". Ini didukung di antarmuka tanpa kode.

    • Konfigurasi di antarmuka tanpa kode:脚本模式配置 Default splitter adalah "-,-".

    • Konfigurasi dalam mode skrip:

      "parameter" : {
            "column": [
              {
                "name": "col1",
                "array": true,
                "type": "long"
              }
            ],
            "splitter":","
      }

Mencegah autentikasi gagal dan log berlebihan

  • Penyebab:

    HttpClient pertama-tama mengirim permintaan tanpa otorisasi untuk menentukan metode autentikasi yang diperlukan. Setelah server merespons dengan tantangan autentikasi, klien mengirim permintaan kedua yang telah diotorisasi. Proses ini terjadi untuk setiap koneksi. Oleh karena itu, setiap operasi tulis ke ES menghasilkan permintaan tanpa otorisasi awal, yang dicatat dalam log audit.

  • Solusi:

    Tambahkan parameter "preemptiveAuth":true dalam mode skrip.

Menyinkronisasi data sebagai tipe tanggal

Untuk mengonfigurasi tulisan berbasis tanggal, gunakan salah satu metode berikut berdasarkan kebutuhan Anda.

  • Tulis konten yang dibaca oleh reader langsung ke bidang date ES.

    • Atur origin:true untuk menulis konten langsung ke ES.

    • Parameter format menentukan properti format untuk bidang saat writer membuat pemetaan di ES.

      "parameter" : {
          "column": [
              {
                  "name": "col_date",
                  "type": "date",
                  "format": "yyyy-MM-dd HH:mm:ss",
                  "origin": true
              }
                ]
      }
  • Konversi zona waktu: Jika Anda ingin Integrasi Data mengonversi zona waktu, tambahkan parameter Timezone.

    "parameter" : {
        "column": [
            {
                "name": "col_date",
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss",
                "Timezone": "UTC"
            }
              ]
    }

Menangani kegagalan tulis karena versi eksternal

  • Anda telah mengonfigurasi kolom dengan type: "version". Elasticsearch tidak mendukung menentukan versi eksternal.

        "column":[
                                {
                                    "name":"id",
                                    "type":"version"
                                },
      ]
  • Solusi:

    Hapus konfigurasi type: "version".

Error: ES_MISSING_DATE_FORMAT

  • Penyebab:

    Elasticsearch Reader tidak dapat mengurai format tanggal bidang date karena pemetaan untuk bidang tersebut di sumber data ES tidak menentukan format.

  • Solusi:

    • Gunakan parameter dateFormat untuk menentukan semua format tanggal yang mungkin, dipisahkan oleh ||. Format-format tersebut harus cocok dengan nilai tanggal di bidang date sumber. Contoh:

      "parameter" : {
            "column": [
           			"dateCol1",
              	"dateCol2",
                "otherCol"
            ],
           "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss",
      }
    • Perbarui pemetaan untuk semua bidang date di indeks ES Anda untuk menyertakan definisi format.

Error: DataXException

  • Penyebab:

    Error ini dapat disebabkan oleh kata kunci terbatas, seperti $ref, dalam nama indeks atau bidang karena keterbatasan pustaka Fastjson.

  • Solusi:

    Hindari menggunakan kata kunci terbatas seperti $ref dalam nama indeks atau bidang, karena Elasticsearch Reader tidak mendukung menyinkronisasi indeks yang mengandungnya. Untuk informasi lebih lanjut, lihat Elasticsearch Reader.

Error: version_conflict_engine_exception

  • Penyebab:

    Error ini terjadi karena konflik versi, yang dipicu oleh mekanisme kunci optimis di ES. Hal ini menunjukkan bahwa versi dokumen dalam perintah pembaruan tidak cocok dengan versi dokumen saat ini. Hal ini dapat terjadi jika dokumen sedang dihapus atau diperbarui oleh proses lain pada saat yang sama.

  • Solusi:

    1. Periksa apakah proses lain sedang menghapus data dari indeks.

    2. Ubah metode sinkronisasi tugas dari Update ke Index.

Error: illegal_argument_exception

  • Penyebab:

    Saat Anda mengonfigurasi properti lanjutan seperti similarity dan properties untuk kolom, properti tersebut harus ditempatkan di dalam objek other_params agar plugin dapat mengenalinya.原因

  • Solusi:

    Di Column, konfigurasikan other_params, dan di other_params, tambahkan similarity sebagai berikut:

    {"name":"dim2_name",...,"other_params":{"similarity":"len_similarity"}}

Error sinkronisasi bidang array: dense_vector

  • Penyebab:

    Saat ini, Elasticsearch Writer tidak mendukung tipe dense_vector. Tipe yang didukung adalah:

    ID,PARENT,ROUTING,VERSION,STRING,TEXT,KEYWORD,LONG,
    INTEGER,SHORT,BYTE,DOUBLE,FLOAT,DATE,BOOLEAN,BINARY,
    INTEGER_RANGE,FLOAT_RANGE,LONG_RANGE,DOUBLE_RANGE,DATE_RANGE,
    GEO_POINT,GEO_SHAPE,IP,IP_RANGE,COMPLETION,TOKEN_COUNT,OBJECT,NESTED;
  • Solusi:

    Untuk bekerja dengan tipe yang tidak didukung, lakukan langkah-langkah berikut:

    • Sebagai gantinya, buat pemetaan indeks secara manual di ES.

    • Ubah tipe data bidang tujuan ke NESTED.

    • Dalam konfigurasi writer, atur dynamic = true dan cleanup=false.

Pengaturan writer tidak berlaku

  • Penyebab:

    # Konfigurasi salah
    "settings": {
      "index": {
        "number_of_shards": 1,
        "number_of_replicas": 0
      }
    }
    # Konfigurasi benar
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 0
    }
  • Solusi:

    Pengaturan hanya diterapkan saat indeks dibuat. Indeks dibuat dalam dua skenario: indeks tidak ada, atau cleanup=true diatur. Jika Anda mengatur cleanup=true, hapus objek pembungkus index dari konfigurasi settings.

Mengapa atribut nested bertipe keyword dalam indeks yang dibuat sendiri berubah menjadi keyword setelah pembuatan otomatis (menjalankan tugas sinkronisasi dengan cleanup=true)?

# Pemetaan asli
{
  "name":"box_label_ret",
  "properties":{
    "box_id":{
      "type":"keyword"
    }
}
# Pemetaan setelah pembuatan ulang dengan cleanup=true
{
    "box_label_ret": {
      "properties": {
        "box_id": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }}}}
}
  • Penyebab:

    Saat memproses tipe nested, Elasticsearch Writer hanya menerapkan pemetaan tingkat atas dan membiarkan Elasticsearch menyimpulkan pemetaan untuk properti nested. Perubahan ini adalah perilaku adaptif Elasticsearch dan tidak memengaruhi fungsionalitasnya. Jika Anda harus menggunakan format pemetaan tertentu, lihat Kemampuan tugas sinkronisasi dalam Integrasi Data.

  • Solusi:

    Untuk mempertahankan pemetaan yang Anda inginkan, buat indeks ES dengan pemetaan yang diperlukan sebelum menjalankan tugas sinkronisasi. Kemudian, atur parameter cleanup ke false dalam konfigurasi tugas.

Kafka

Data melebihi endDateTime

Kafka Reader membaca data dalam batch. Jika batch berisi catatan yang lebih baru daripada endDateTime yang ditentukan, reader berhenti menyinkronisasi batch berikutnya. Namun, reader tetap menulis catatan dari batch saat ini yang melebihi endDateTime ke sumber data tujuan.

  • Anda dapat menggunakan parameter skipExceedRecord untuk mengontrol apakah akan menulis catatan berlebih ini. Untuk detailnya, lihat Kafka Reader. Kami tidak merekomendasikan melewatkan catatan ini karena dapat menyebabkan kehilangan data.

  • Anda dapat mengonfigurasi parameter max.poll.records Kafka untuk membatasi jumlah catatan yang diambil dalam satu polling. Dengan menyesuaikan parameter ini bersama dengan jumlah thread paralel, Anda dapat mengontrol jumlah maksimum data berlebih. Jumlah data berlebih kurang dari max.poll.records * jumlah thread paralel.

Tugas tidak selesai

  • Penyebab:

    Volume data rendah atau distribusi data tidak merata dapat menyebabkan beberapa partisi Kafka tidak menerima data baru, atau data baru tidak mencapai offset akhir yang ditentukan. Tugas sinkronisasi batch hanya dapat keluar saat semua partisi telah mencapai offset akhir yang ditentukan. Partisi yang menganggur ini mencegah tugas selesai.

  • Solusi:

    Dalam situasi ini, atur strategi keluar ke Keluar jika tidak ada data baru yang dibaca selama 1 menit. Dalam mode skrip, atur parameter stopWhenPollEmpty ke true dan parameter stopWhenReachEndOffset ke true. Hal ini memungkinkan tugas keluar setelah membaca semua data hingga offset terbaru di semua partisi, mencegah eksekusi menganggur. Namun, perhatikan bahwa jika catatan dengan timestamp lebih awal daripada endDateTime yang dikonfigurasi diproduksi setelah tugas keluar, catatan tersebut tidak dapat dikonsumsi.

RestAPI

Error RestAPI Writer: The JSON data at path:[] is not an array

RestAPI Writer menyediakan dua mode tulis. Untuk menyinkronisasi beberapa catatan data, atur parameter dataMode ke multiData dan tambahkan dataPath:"data.list" ke skrip RestAPI Writer. Untuk informasi lebih lanjut, lihat RestAPI Writer.参数

Penting

Saat mengonfigurasi kolom, jangan tambahkan awalan "data.list".

Konfigurasi Tablestore Writer

Kunci utama auto-increment

  1. Konfigurasi Tablestore Writer harus mencakup parameter berikut:

    "newVersion": "true",
    "enableAutoIncrement": "true",
  2. Jangan tentukan nama kolom kunci utama auto-increment.

  3. Jumlah total kolom yang ditentukan dalam parameter primaryKey dan column harus sama dengan jumlah kolom dari Tablestore Reader hulu.

Konfigurasi model time series

_tags dan is_timeseries_tag

Misalnya, catatan data memiliki tiga tag: phone=xiaomi, RAM=8G, dan camera=LEICA.数据

  • Contoh ekspor data (Tablestore Reader)

    • Untuk menggabungkan tag ini dan mengekspornya sebagai satu kolom, gunakan konfigurasi berikut:

      "column": [
            {
              "name": "_tags",
            }
          ],

      DataWorks mengekspor tag sebagai satu kolom dalam format berikut:

      ["phone=xiaomi","camera=LEICA","RAM=8G"]
    • Untuk mengekspor tag phone dan camera sebagai kolom terpisah, gunakan konfigurasi berikut:

      "column": [
            {
              "name": "phone",
              "is_timeseries_tag":"true",
            },
            {
              "name": "camera",
              "is_timeseries_tag":"true",
            }
          ],

      DataWorks mengekspor dua kolom dalam format berikut:

      xiaomi, LEICA
  • Contoh impor data (Tablestore Writer)

    Asumsikan sumber data hulu berisi dua kolom data:

    • Satu kolom berisi: ["phone=xiaomi","camera=LEICA","RAM=8G"].

    • Kolom lain berisi 6499.

    Untuk menambahkan data dari kedua kolom ke bidang tag, 格式 gunakan konfigurasi ini:

    "column": [
          {
            "name": "_tags",
          },
          {
            "name": "price",
            "is_timeseries_tag":"true",
          },
        ],
    • Konfigurasi kolom pertama mengimpor seluruh array ["phone=xiaomi","camera=LEICA","RAM=8G"] ke bidang tag.

    • Konfigurasi kolom kedua mengimpor price=6499 sebagai tag terpisah ke bidang tag.

Nama tabel kustom

Nama tabel kustom

Jika nama tabel Anda mengikuti pola, seperti tabel harian bernama orders_20170310, orders_20170311, dan orders_20170312, dan memiliki skema tabel yang sama, Anda dapat menggunakan parameter penjadwalan dalam konfigurasi mode skrip untuk menentukan nama tabel kustom. Hal ini memungkinkan tugas secara otomatis membaca data dari tabel hari sebelumnya di database sumber setiap pagi.

Misalnya, jika tugas dijalankan pada 15 Maret 2017, tugas tersebut membaca data dari tabel orders_20170314.自定义表名

Dalam mode Skrip, ganti nama tabel sumber dengan variabel, seperti orders_${tablename}. Karena Anda perlu membaca data hari sebelumnya, atur tablename=${yyyymmdd-1} dalam konfigurasi parameter tugas.

Catatan

Untuk informasi lebih lanjut tentang cara menggunakan parameter penjadwalan, lihat Format parameter penjadwalan.

Modifikasi kolom tabel

Perubahan kolom sumber

Buka halaman konfigurasi tugas sinkronisasi, perbarui pemetaan kolom, dan kirim ulang tugas.

Masalah konfigurasi tugas

Daftar tabel tidak lengkap

Saat Anda mengonfigurasi tugas sinkronisasi batch, bagian Select source secara default hanya mencantumkan 25 tabel pertama. Jika tabel yang Anda butuhkan tidak tercantum, cari berdasarkan nama tabelnya atau gunakan editor kode.

Kata kunci dalam nama tabel atau kolom

Kegagalan tugas terkait kata kunci

  • Penyebab: Tugas gagal saat nama kolom merupakan kata kunci yang dicadangkan atau diawali angka.

  • Solusi: Alihkan tugas sinkronisasi Integrasi Data ke mode skrip dan gunakan karakter escape untuk bidang khusus dalam konfigurasi kolom. Lihat Konfigurasi Tugas dalam Mode Skrip untuk informasi lebih lanjut.

    • Untuk MySQL, tutup kata kunci dengan backtick (misalnya, `keyword`).

    • Untuk Oracle dan PostgreSQL, tutup kata kunci dengan tanda kutip ganda (misalnya, "keyword").

    • Untuk SQL Server, tutup kata kunci dengan tanda kurung siku (misalnya, [keyword]).

    Berikut contoh menggunakan MySQL:字段冲突

  • Contoh berikut menggunakan sumber data MySQL:

    1. Jalankan pernyataan berikut untuk membuat tabel bernama aliyun.create table aliyun (`table` int ,msg varchar(10));

    2. Jalankan pernyataan berikut untuk membuat view dan memberikan alias ke kolom table.create view v_aliyun as select `table` as col1,msg as col2 from aliyun;

      Catatan
      • Kata table adalah kata kunci MySQL. Akibatnya, pernyataan SQL yang dihasilkan gagal selama sinkronisasi data. Untuk mencegah hal ini, buat view dan berikan alias ke kolom table.

      • Sebagai praktik terbaik, hindari menggunakan kata kunci sebagai nama kolom.

    3. Saat Anda mengonfigurasi tugas sinkronisasi, pilih view v_aliyun alih-alih tabel aliyun untuk menggunakan alias yang Anda berikan ke kolom kata kunci.

Pemetaan bidang

Error tugas batch: plugin xx does not specify column

Error ini terjadi jika pemetaan bidang untuk tugas sinkronisasi salah atau parameter column tidak dikonfigurasi dengan benar untuk plugin.

  1. Verifikasi bahwa pemetaan bidang dikonfigurasi.

  2. Pastikan bahwa parameter column dikonfigurasi dengan benar untuk plugin.

Kegagalan pemetaan data tidak terstruktur

  • Gejala:

    Mengklik Preview Data menampilkan pesan yang menunjukkan bahwa ukuran bidang melebihi batas byte.

    问题现象

  • Penyebab: Untuk mencegah error kehabisan memori (OOM), layanan sumber data memeriksa panjang setiap bidang saat memproses permintaan pratinjau data. Jika satu kolom melebihi 1.000 byte, pesan ini muncul. Pesan ini tidak memengaruhi operasi normal tugas. Anda dapat mengabaikan error dan menjalankan tugas sinkronisasi batch.

    Catatan

    Jika file sumber ada dan konektivitas jaringan normal, pratinjau data juga dapat gagal karena alasan berikut:

    • Data dalam satu baris file melebihi batas 10 MB. Dalam kasus ini, tidak ada data yang ditampilkan, dan pesan serupa muncul.

    • Jumlah kolom dalam satu baris melebihi batas 1.000 kolom. Dalam kasus ini, hanya 1.000 kolom pertama yang ditampilkan, dan pesan muncul di kolom ke-1.001.

Modifikasi TTL

TTL untuk tabel yang disinkronisasi

TTL adalah pengaturan tingkat tabel. Anda tidak dapat mengonfigurasinya dalam tugas sinkronisasi batch.

Agregasi fungsi

Agregasi fungsi melalui API

Tidak. Sinkronisasi data berbasis API tidak mendukung fungsi sumber. Proses data di sumber sebelum menyinkronisasikannya ke tujuan.