全部产品
Search
文档中心

DataWorks:FAQ sinkronisasi offline

更新时间:Nov 15, 2025

Topik ini menjelaskan masalah umum terkait sinkronisasi offline.

Ikhtisar dokumen

Anda dapat mencari kata kunci dalam dokumen ini untuk menemukan masalah umum dan solusinya.

Kategorisasi masalah

Kata kunci masalah

Referensi

Masalah O&M umum untuk tugas sinkronisasi offline

Masalah komunikasi jaringan

Mengapa pengujian konektivitas sumber data berhasil, tetapi tugas sinkronisasi offline gagal terhubung ke sumber data?

Beralih kelompok sumber daya

Bagaimana cara beralih ke kelompok sumber daya eksekusi untuk tugas sinkronisasi offline?

Data Kotor

Waktu eksekusi habis

Bagaimana cara memecahkan masalah tugas sinkronisasi offline yang berjalan lama?

Tugas sinkronisasi data melambat karena klausa WHERE tidak memiliki indeks, sehingga menyebabkan pemindaian tabel penuh

Mempertahankan nilai default tabel sumber

Jika tabel sumber memiliki nilai default, apakah nilai tersebut akan dipertahankan di tabel target yang dibuat oleh Data Integration, beserta kendala NOT NULL?

Kunci shard

Dapatkah kunci utama komposit digunakan sebagai kunci shard saat mengonfigurasi tugas integrasi offline?

Data hilang

Setelah sinkronisasi data, data di tabel target tidak konsisten dengan tabel sumber

Penyebab dan solusi untuk kesalahan non-plugin

Data kotor

Bagaimana cara menangani kesalahan data kotor yang disebabkan oleh pengaturan format encoding atau teks rusak?

Serangan SSRF

Bagaimana cara menangani kesalahan "Task have SSRF attacks"?

Masalah komunikasi jaringan

Mengapa tugas sinkronisasi offline kadang berhasil dan kadang gagal?

Kata kunci nama tabel/kolom

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

Menambahkan kolom ke tabel

Bagaimana cara menangani penambahan atau modifikasi kolom di tabel sumber tugas sinkronisasi offline?

Penulisan tanggal

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

Penyebab dan solusi untuk kesalahan plugin tertentu

MongoDB

OSS

Apakah ada batasan jumlah file yang dapat dibaca dari OSS?

DataHub

Saat menulis ke DataHub, bagaimana cara menangani kegagalan penulisan yang disebabkan oleh melebihi batas data penulisan tunggal?

Lindorm

Saat menggunakan metode bulk Lindorm untuk menulis data, apakah data historis diganti setiap kali?

Elasticsearch

Bagaimana cara mengkueri semua bidang di bawah indeks ES?

Konfigurasi OTS Writer

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

Konfigurasi model deret waktu

Dalam konfigurasi model deret waktu, apa arti bidang _tag dan is_timeseries_tag?

Skenario dan solusi sinkronisasi offline

Nama tabel kustom

Bagaimana cara menyesuaikan nama tabel untuk tugas sinkronisasi offline?

MaxCompute

Masalah konfigurasi tugas

Saat mengonfigurasi node sinkronisasi offline, saya tidak dapat melihat semua tabel. Bagaimana cara menanganinya?

LogHub

Kafka

OSS

MySQL

Ubah TTL

Untuk tabel data yang disinkronkan, apakah TTL hanya dapat diubah menggunakan metode ALTER?

Agregasi fungsi

Saat menyinkronkan melalui API, apakah didukung untuk menggunakan fungsi sisi sumber (misalnya, MaxCompute) untuk agregasi? Misalnya, jika tabel sumber memiliki kolom a dan b sebagai kunci utama untuk Lindorm.

Elasticsearch

Pemetaan bidang

Untuk sumber data tidak terstruktur, bidang tidak dapat dipetakan saat saya mengklik Pratinjau Data. Bagaimana cara menanganinya?

Pesan kesalahan dan solusi

Masalah pengaturan sumber daya

OSS

Terjadi kesalahan saat membaca data dari OSS: AccessDenied The bucket you access does not belong to you.

Redis

Saat menulis ke Redis dalam mode hash, terjadi kesalahan: Code:[RedisWriter-04], Description:[Dirty data]. - source column number is in valid!

PostgreSQL

Terjadi kesalahan saat membaca data dari PostgreSQL: org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery

MySQL

Konflik instance tugas

Tugas offline gagal dengan kesalahan: Duplicate entry 'xxx' for key 'uk_uk_op'

Masalah komunikasi jaringan

Tugas sinkronisasi offline dengan sumber data MySQL gagal dengan kesalahan timeout koneksi: Communications link failure

Pemetaan Bidang

Tugas offline gagal dengan kesalahan: plugin xx does not specify column

MaxCompute

RestAPI

RestAPI Writer melaporkan kesalahan: The JSON string found through path:[] is not an array type

RDS

Tugas sinkronisasi offline dengan sumber Amazon RDS gagal dengan kesalahan: Host is blocked

MongoDB

Elasticsearch

Hive

Tugas sinkronisasi offline ke instance Hive lokal gagal dengan kesalahan: Could not get block locations.

Waktu eksekusi habis

Tugas sinkronisasi offline dengan sumber MongoDB gagal dengan kesalahan: MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit.

Masalah komunikasi jaringan

Mengapa pengujian konektivitas sumber data berhasil, tetapi tugas sinkronisasi offline gagal terhubung ke sumber data?

  • Jika pengujian konektivitas sebelumnya berhasil, jalankan kembali untuk memastikan bahwa kelompok sumber daya dan database masih terhubung. Pastikan tidak ada perubahan yang dilakukan pada database.

  • Periksa apakah kelompok sumber daya yang digunakan untuk pengujian konektivitas sama dengan yang digunakan untuk eksekusi tugas.

    Untuk melihat kelompok sumber daya tempat tugas berjalan:

    • Jika tugas berjalan di kelompok sumber daya default, log berisi informasi berikut: running in Pipeline[basecommon_ group_xxxxxxxxx]

    • Jika tugas berjalan di kelompok sumber daya eksklusif untuk Integrasi Data, log berisi informasi berikut: running in Pipeline[basecommon_S_res_group_xxx]

    • Jika tugas berjalan di kelompok 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 terjadi kesalahan.

Mengapa tugas sinkronisasi offline kadang berhasil dan kadang gagal?

Tugas sinkronisasi offline dapat gagal secara intermiten jika konfigurasi daftar putih tidak lengkap. Periksa apakah daftar putih database telah dikonfigurasi sepenuhnya.

Saat Anda menggunakan kelompok sumber daya eksklusif untuk Integrasi Data:

  • Jika Anda menambahkan alamat IP antarmuka jaringan elastis (ENI) dari kelompok sumber daya eksklusif untuk Integrasi Data ke daftar putih sumber data, Anda harus memperbarui daftar putih setelah melakukan penskalaan keluar kelompok sumber daya. Tambahkan alamat IP ENI dari kelompok sumber daya yang diskalakan ke daftar putih sumber data.

  • Untuk menghindari pembaruan daftar putih setelah penskalaan keluar kelompok sumber daya, Anda dapat menambahkan blok CIDR vSwitch dari kelompok sumber daya eksklusif untuk Integrasi Data ke daftar putih database. Untuk informasi lebih lanjut, lihat Tambahkan daftar putih.

Saat Anda menggunakan kelompok sumber daya Serverless: Untuk informasi lebih lanjut, lihat Tambahkan daftar putih untuk memeriksa konfigurasi daftar putih kelompok sumber daya dan memastikan pengaturan jaringan benar.

Jika daftar putih telah dikonfigurasi dengan benar, periksa apakah beban database terlalu tinggi. Beban tinggi dapat menyebabkan koneksi terputus.

Masalah pengaturan sumber daya

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

  • Penyebab yang mungkin:

    Tingkat konkurensi diatur terlalu tinggi, sehingga menyebabkan sumber daya tidak mencukupi.

  • Solusi:

    Kurangi tingkat konkurensi tugas sinkronisasi offline.

Tugas sinkronisasi offline gagal dengan kesalahan: OutOfMemoryError: Java heap space

Untuk mengatasi kesalahan ini, lakukan langkah-langkah berikut:

  1. Jika konfigurasi plugin mendukung parameter seperti `batchSize` atau `maxFileSize`, kurangi nilainya.

    Untuk memeriksa plugin mana yang mendukung parameter ini, buka Sumber data yang didukung dan plugin reader dan writer dan klik plugin terkait untuk melihat detail parameternya.

  2. Kurangi tingkat konkurensi.

  3. Untuk sinkronisasi file, seperti menyinkronkan file dari OSS, kurangi jumlah file yang akan dibaca.

  4. Di bagian Running Resources pada konfigurasi tugas, tingkatkan nilai Resource Consumption (CU) ke tingkat yang sesuai untuk menghindari memengaruhi tugas lain yang sedang berjalan.

Konflik instance tugas

Tugas offline gagal dengan kesalahan: Duplicate entry 'xxx' for key 'uk_uk_op'

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

  • Kemungkinan penyebab: Integrasi Data tidak mengizinkan instance berbeda dari node tugas sinkronisasi yang sama berjalan secara bersamaan. Artinya, beberapa tugas sinkronisasi yang memiliki konfigurasi JSON yang sama tidak dapat berjalan pada waktu yang sama. Misalnya, tugas sinkronisasi dijadwalkan berjalan setiap 5 menit dan mengalami penundaan upstream. Pada pukul 00:05, instance untuk 00:00 dan instance untuk 00:05 dipicu. Hal ini dapat menyebabkan salah satu instance gagal. Konflik juga dapat terjadi jika operasi pengisian ulang data atau pengulangan ulang dilakukan saat instance tugas sedang berjalan.

  • Solusi: Atur waktu eksekusi instance agar tidak bertumpang tindih. Untuk tugas yang berjalan setiap jam atau menit, Anda dapat mengatur dependensi mandiri. Hal ini memastikan bahwa instance untuk siklus saat ini dimulai hanya setelah instance untuk siklus sebelumnya selesai. Untuk versi sebelumnya dari Pengembangan Data, lihat Dependensi mandiri. Untuk versi baru Pengembangan Data, lihat Pilih jenis dependensi (dependensi lintas siklus).

Waktu eksekusi habis

Tugas sinkronisasi offline dengan sumber MongoDB gagal dengan kesalahan: MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit.

  • Pesan kesalahan: Tugas sinkronisasi data gagal dengan kesalahan MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit.

  • Kemungkinan penyebab: Jumlah data yang ditarik terlalu besar.

  • Solusi:

    • Tingkatkan tingkat konkurensi.

    • Kurangi BatchSize.

    • Di pengaturan parameter Reader, tambahkan konfigurasi cursorTimeoutInMs. Coba atur nilai yang lebih besar, misalnya 3.600.000 ms.

Tugas sinkronisasi offline dengan sumber data MySQL gagal dengan kesalahan timeout koneksi: Communications link failure

  • Kesalahan baca

    • Gejala:

      Saat data dibaca, terjadi kesalahan berikut: 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 yang mungkin:

      Database mengeksekusi kueri SQL secara lambat, yang menyebabkan timeout baca MySQL.

    • Solusi:

      • Periksa apakah kondisi filter where diatur dan pastikan bahwa indeks telah ditambahkan ke bidang yang difilter.

      • Periksa apakah tabel data sumber berisi terlalu banyak data. Jika ya, bagi tugas menjadi beberapa tugas yang lebih kecil.

      • Temukan pernyataan SQL yang memblokir di log dan konsultasikan dengan administrator basis data (DBA) untuk menyelesaikan masalah.

  • Kesalahan tulis

    • Gejala:

      Saat data ditulis, terjadi kesalahan 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 yang mungkin:

      Kueri lambat menyebabkan timeout soket. Timeout soket default untuk koneksi TDDL adalah 12 detik. Jika pernyataan SQL memerlukan waktu lebih dari 12 detik untuk dieksekusi di sisi MySQL tanpa mengembalikan hasil, kesalahan 4614 dilaporkan. Kesalahan ini dapat terjadi secara intermiten ketika volume data besar atau server sibuk.

    • Solusi:

      • Jalankan ulang tugas sinkronisasi setelah database stabil.

      • Hubungi administrator basis data untuk menyesuaikan periode timeout.

Bagaimana cara memecahkan masalah tugas sinkronisasi offline yang berjalan lama?

Kemungkinan penyebab 1: Waktu eksekusi lama

  • Pernyataan pra-eksekusi atau pasca-eksekusi, seperti `preSql` dan `postSql`, memerlukan waktu terlalu lama untuk dieksekusi di database, yang menyebabkan tugas berjalan lambat.

  • Kunci shard tidak dikonfigurasi dengan benar, yang menyebabkan tugas berjalan lambat.

    Sinkronisasi offline menggunakan kunci shard (`splitPk`) untuk membagi data. Proses sinkronisasi data memulai tugas konkuren berdasarkan konfigurasi ini untuk meningkatkan efisiensi. Periksa dokumentasi plugin terkait untuk menentukan apakah kunci shard perlu dikonfigurasi.

Solusi 1:

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

  • Jika plugin mendukung kunci shard, konfigurasikan dengan benar. Informasi berikut menjelaskan cara mengonfigurasi kunci shard untuk plugin MySQL Reader:

    • Gunakan kunci utama tabel untuk `splitPk`. Kunci utama biasanya didistribusikan secara merata, yang membantu mencegah titik panas data di shard yang dibuat.

    • Saat ini, `splitPk` hanya mendukung data integer untuk pembagian shard. Tidak mendukung tipe data lain, seperti string, bilangan titik mengambang, atau tanggal. Jika Anda menentukan tipe data yang tidak didukung, satu saluran digunakan untuk sinkronisasi.

    • Jika Anda tidak menentukan `splitPk` atau nilai `splitPk` kosong, sinkronisasi data menggunakan satu saluran untuk menyinkronkan data tabel.

Kemungkinan penyebab 2: Tugas sedang menunggu sumber daya eksekusi Integrasi Data

Solusi 2: Jika log menunjukkan status `WAIT` yang berkepanjangan, kelompok sumber daya eksklusif untuk Integrasi Data yang digunakan oleh tugas tidak memiliki cukup sumber daya konkuren yang tersedia untuk menjalankan tugas. Untuk informasi lebih lanjut tentang penyebab dan solusi, lihat Mengapa tugas Integrasi Data selalu menunjukkan status "wait"?.

Catatan

Tugas sinkronisasi offline dikirim dari kelompok sumber daya penjadwalan ke kelompok sumber daya eksekusi Integrasi Data. Oleh karena itu, tugas sinkronisasi offline mengonsumsi satu sumber daya penjadwalan. Jika tugas sinkronisasi offline berjalan lama tanpa melepaskan sumber dayanya, tugas tersebut tidak hanya memblokir tugas offline lain tetapi juga jenis tugas terjadwal lainnya.

Tugas sinkronisasi data melambat karena klausa WHERE tidak memiliki indeks, sehingga menyebabkan pemindaian tabel penuh

  • Contoh skenario

    Pernyataan SQL yang dieksekusi adalah sebagai berikut.

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

    Eksekusi dimulai pada 2016-10-25 11:01:24.875 dan hasil mulai dikembalikan pada 2016-10-25 11:11:05.489. Program sinkronisasi menunggu database mengembalikan hasil kueri SQL. Akibatnya, MaxCompute harus menunggu lama sebelum dapat dieksekusi.

  • Analisis penyebab

    Saat mengkueri dengan klausa `WHERE`, kolom createTime tidak memiliki indeks, yang menyebabkan pemindaian tabel penuh.

  • Solusi

    Gunakan kolom yang diindeks dalam klausa where untuk meningkatkan kinerja. Anda juga dapat menambahkan indeks ke kolom yang diperlukan.

Beralih kelompok sumber daya

Bagaimana cara beralih ke kelompok sumber daya eksekusi untuk tugas sinkronisasi offline?

Untuk versi sebelumnya dari Pengembangan Data:

Anda dapat memodifikasi kelompok sumber daya untuk debugging di halaman detail tugas sinkronisasi offline di DataStudio. Anda juga dapat memodifikasi kelompok sumber daya eksekusi Integrasi Data untuk penjadwalan tugas di Operation Center. Untuk informasi lebih lanjut, lihat Beralih kelompok sumber daya Integrasi Data.

Untuk versi baru Pengembangan Data:

Anda dapat memodifikasi kelompok sumber daya yang digunakan untuk debugging tugas Integrasi Data di DataStudio. Anda juga dapat memodifikasi kelompok sumber daya eksekusi untuk tugas Integrasi Data terjadwal di Operation Center. Untuk informasi lebih lanjut, lihat O&M kelompok sumber daya.

Data kotor

Bagaimana cara memecahkan masalah dan menemukan data kotor?

Definisi data kotor: Satu catatan data yang menyebabkan pengecualian saat ditulis ke sumber data target dianggap sebagai data kotor. Data apa pun yang gagal ditulis diklasifikasikan sebagai data kotor.

Dampak data kotor: Data kotor tidak ditulis ke tujuan. Anda dapat mengontrol apakah data kotor diizinkan dan menetapkan ambang batas jumlah catatan data kotor. Secara default, Integrasi Data mengizinkan data kotor. Anda dapat menentukan jumlah catatan data kotor yang diizinkan saat mengonfigurasi tugas sinkronisasi. Untuk informasi lebih lanjut, lihat Konfigurasi node sinkronisasi di antarmuka tanpa kode.

  • Jika tugas diatur untuk mengizinkan data kotor: Saat data kotor dihasilkan, tugas terus berjalan, tetapi data kotor dibuang dan tidak ditulis ke tujuan.

  • Jumlah catatan data kotor yang diizinkan:

    • Jika jumlah catatan data kotor yang diizinkan adalah 0, tugas gagal dan berhenti saat catatan data kotor pertama dihasilkan.

    • Jika jumlah catatan data kotor yang diizinkan diatur ke x, tugas gagal dan berhenti jika jumlah catatan data kotor melebihi x. Jika jumlah catatan data kotor kurang dari x, tugas terus berjalan, tetapi data kotor dibuang dan tidak ditulis ke tujuan.

Skenario data kotor:

  • Skenario 1:

    • Pesan kesalahan: {"message":"Dirty data was encountered when writing to the ODPS destination table: An error occurred in the data of the [3rd] field. Please check the data and modify 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 bahwa data kotor berada di bidang ketiga.

      • Writer melaporkan data kotor. Periksa pernyataan pembuatan tabel untuk writer. Kesalahan ini dapat terjadi jika ukuran bidang yang ditentukan untuk tabel di ODPS lebih kecil daripada ukuran data bidang yang sesuai di MySQL.

      • Prinsip sinkronisasi data: Data dari sumber data harus dapat ditulis ke sumber data tujuan. Artinya, tipe data sumber dan tujuan harus cocok, dan ukuran bidang yang ditentukan harus kompatibel. Misalnya, data tipe `VARCHAR` dari sumber tidak dapat ditulis ke kolom target tipe `INT`. Ukuran tipe data yang ditentukan di tujuan harus dapat menampung ukuran data aktual bidang yang dipetakan dari sumber. Untuk data sumber tipe `LONG`, `VARCHAR`, atau `DOUBLE`, tujuan dapat menggunakan tipe rentang besar seperti `string` atau `text`.

      • Jika penyebab kesalahan data kotor tidak jelas, salin seluruh catatan data kotor dari log. Kemudian, periksa data dan bandingkan dengan tipe data tujuan untuk mengidentifikasi bagian mana yang tidak sesuai spesifikasi.

      Contoh:

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

      Dalam contoh ini, `byteSize` adalah jumlah byte, `index: 25` menunjukkan bidang ke-26, `rawData` adalah nilai spesifik, dan `type` adalah tipe data.

  • Skenario 2:

    • Gejala: DataX melaporkan data kotor saat membaca nilai null dari MySQL.

    • Solusi: Periksa apakah bidang dengan nilai null di sumber cocok dengan tipe data bidang yang dipetakan di tabel target. Kesalahan dilaporkan jika tipe data tidak konsisten. Misalnya, kesalahan terjadi jika Anda mencoba menulis nilai null tipe string ke bidang target tipe int.

Bagaimana cara melihat data kotor?

Anda dapat buka halaman detail log dan klik Detail log url untuk melihat log sinkronisasi offline dan informasi data kotor.查看日志

Jika jumlah catatan data kotor melebihi batas selama tugas sinkronisasi offline, apakah data yang telah disinkronkan akan tetap disimpan?

Jumlah catatan data kotor diakumulasi selama eksekusi tugas. Jika jumlah ini melebihi batas data kotor yang ditentukan, tugas segera dihentikan.

  • Retensi data: Data yang berhasil ditulis ke tujuan sebelum tugas dihentikan tetap disimpan. Tidak ada operasi rollback yang dilakukan.

  • Kebijakan toleransi nol: Jika batas data kotor diatur ke 0, sistem menerapkan kebijakan toleransi nol. Artinya, tugas gagal dan berhenti segera setelah mendeteksi catatan data kotor pertama.

Bagaimana cara menangani kesalahan data kotor yang disebabkan oleh pengaturan format encoding atau teks rusak?

  • Gejala:

    Jika data mencakup emoji, kesalahan data kotor dapat dilaporkan 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"} .

  • Kemungkinan penyebab:

    • Encoding database tidak diatur ke `utf8mb4`, yang menyebabkan kesalahan saat menyinkronkan emoji.

    • Data sumber itu sendiri rusak.

    • Database dan klien menggunakan set karakter yang berbeda.

    • Browser menggunakan set karakter yang berbeda, yang menyebabkan kegagalan pratinjau atau teks rusak.

  • Solusi:

    Pilih solusi yang sesuai berdasarkan penyebab teks rusak:

    • Jika data mentah Anda rusak, proses data mentah sebelum menjalankan tugas sinkronisasi.

    • Jika database dan klien menggunakan set karakter yang tidak konsisten, satukan set karakter terlebih dahulu.

    • Jika browser menggunakan set karakter yang tidak konsisten dengan set karakter database atau klien, satukan set karakter terlebih dahulu, lalu pratinjau data.

    Anda dapat mencoba operasi berikut:

    1. Untuk sumber data yang ditambahkan menggunakan format Konektivitas Basis Data Java (JDBC), modifikasi string koneksi untuk menggunakan `utf8mb4`: jdbc:mysql://xxx.x.x.x:3306/database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45.

    2. Untuk sumber data yang ditambahkan menggunakan ID instans, tambahkan parameter setelah nama database: database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45.

    3. Modifikasi format encoding database yang relevan ke `utf8mb4`. Misalnya, Anda dapat memodifikasi format encoding database RDS di konsol RDS.

      Catatan

      Perintah untuk mengatur format encoding sumber data RDS: set names utf8mb4. Perintah untuk melihat format encoding database RDS: show variables like 'char%'.

Mempertahankan nilai default tabel sumber

Jika tabel sumber memiliki nilai default, apakah nilai tersebut akan dipertahankan di tabel target yang dibuat oleh Data Integration, beserta kendala NOT NULL?

Saat DataWorks membuat tabel target, hanya nama kolom, tipe data, dan komentar dari tabel sumber yang dipertahankan. Nilai default tabel sumber atau kendala seperti kendala `NOT NULL` dan indeks tidak dipertahankan.

Kunci shard

Dapatkah kunci utama komposit digunakan sebagai kunci shard saat mengonfigurasi tugas integrasi offline?

Tidak. Tugas integrasi offline tidak mendukung penggunaan kunci utama komposit sebagai kunci shard.

Data hilang

Setelah sinkronisasi data, data di tabel target tidak konsisten dengan tabel sumber

Jika Anda mengalami masalah kualitas data setelah sinkronisasi data selesai, lihat Memecahkan masalah kualitas data dalam sinkronisasi offline untuk pemecahan masalah terperinci.

Serangan SSRF

Serangan SSRF dalam tugasTask have SSRF attacks: Bagaimana cara menyelesaikannya?

T: Bagaimana cara menangani kesalahan "Task have SSRF attacks"?

Penyebab: Untuk memastikan keamanan cloud, DataWorks melarang tugas mengakses langsung alamat jaringan internal di lingkungan cloud menggunakan alamat IP publik. Langkah keamanan ini dipicu ketika URL yang mengarah ke alamat IP internal atau nama domain VPC dimasukkan dalam konfigurasi plugin, seperti HTTP Reader.

Solusi:

Untuk tugas yang berjalan di sumber data internal, hentikan penggunaan kelompok sumber daya publik. Sebagai gantinya, beralihlah ke kelompok sumber daya Serverless yang aman dan andal (disarankan) atau kelompok sumber daya eksklusif untuk Integrasi Data.

Penulisan tanggal

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

Setelah Anda beralih tugas sinkronisasi ke editor kode, tambahkan item konfigurasi berikut di bagian setting halaman konfigurasi tugas:

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

image.png

Di mana:

  • `dateFormat` menentukan format tanggal yang digunakan saat tipe `DATE` sumber (tanpa waktu) dikonversi ke teks.

  • `datetimeFormatInNanos` menentukan format tanggal yang digunakan saat tipe `DATETIME` atau `TIMESTAMP` sumber (dengan waktu) dikonversi ke teks, dengan presisi hingga milidetik.

MaxCompute

Catatan tentang "Tambah Baris" atau "Tambah Bidang" untuk bidang tabel sumber saat membaca data dari tabel MaxCompute (ODPS)

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

  2. Anda dapat menggunakannya dengan parameter penjadwalan, seperti '${bizdate}'. Untuk informasi lebih lanjut tentang cara menggunakan parameter penjadwalan, lihat Format parameter penjadwalan yang didukung.

  3. Anda dapat memasukkan nama kolom partisi yang ingin Anda sinkronkan, seperti `pt`.

  4. Jika nilai yang Anda masukkan tidak dapat diuraikan, tipe ditampilkan sebagai 'Custom'.

  5. Anda tidak dapat mengonfigurasi fungsi ODPS.

  6. Jika kolom yang ditambahkan secara manual ditampilkan sebagai kustom, seperti kolom partisi MaxCompute atau kolom yang tidak dipratinjau dalam data LogHub, eksekusi tugas tidak terpengaruh.

Saat membaca data dari tabel MaxCompute (ODPS), bagaimana cara menyinkronkan bidang partisi?

Di daftar pemetaan bidang, di bawah Bidang tabel sumber, klik Add Row atau Add Field. Masukkan nama kolom partisi, seperti pt, dan konfigurasikan pemetaannya ke bidang tabel target.

image

Saat membaca data dari tabel MaxCompute (ODPS), bagaimana cara menyinkronkan data dari beberapa partisi?

Tentukan partisi dari mana Anda ingin membaca data.

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

  • Secara default, tugas melaporkan kesalahan saat mencoba membaca partisi yang tidak ada. Untuk mengizinkan tugas berhasil meskipun partisi tidak ada, Anda dapat mengatur parameter When Partition Does Not Exist ke Abaikan partisi yang tidak ada. Atau, Anda dapat beralih ke editor kode dan menambahkan konfigurasi "successOnNoPartition": true ke parameter ODPS.

Sebagai contoh, jika tabel terpartisi `test` berisi empat partisi: `pt=1,ds=hangzhou`, `pt=1,ds=shanghai`, `pt=2,ds=hangzhou`, dan `pt=2,ds=beijing`, konfigurasi untuk membaca data dari partisi berbeda adalah sebagai berikut:

  • Untuk membaca data dari partisi `pt=1,ds=hangzhou`, konfigurasi informasi partisi adalah "partition":"pt=1,ds=hangzhou".

  • Untuk membaca data dari semua partisi di mana `pt=1`, konfigurasi informasi partisi adalah "partition":"pt=1,ds=*".

  • Untuk membaca data dari semua partisi di tabel `test`, konfigurasi informasi partisi adalah "partition":"pt=*,ds=*".

Anda juga dapat mengatur kondisi untuk mengambil data partisi. Operasi berikut memerlukan Anda untuk mengonfigurasi tugas di editor kode:

  • Untuk menentukan partisi maksimum, Anda dapat menambahkan konfigurasi /*query*/ ds=(select MAX(ds) from DataXODPSReaderPPR).

  • Untuk memfilter berdasarkan kondisi, Anda dapat menambahkan kondisi seperti konfigurasi /*query*/ pt+expression. Misalnya, /*query*/ pt>=20170101 and pt<20170110 mengambil semua data dari partisi `pt` setelah 1 Januari 2017 (inklusif) dan sebelum 10 Januari 2017 (eksklusif).

Catatan

/*query*/ menunjukkan bahwa konten berikutnya dikenali sebagai kondisi `WHERE`.

Bagaimana cara melakukan penyaringan kolom, pengurutan ulang, dan pengisian null di MaxCompute?

Dengan mengonfigurasi MaxCompute Writer, Anda dapat melakukan operasi yang tidak didukung MaxCompute, seperti penyaringan kolom, pengurutan ulang, dan pengisian null. Misalnya, jika daftar bidang yang akan diimpor mencakup semua bidang, Anda dapat mengonfigurasinya sebagai "column": ["*"].

Jika tabel MaxCompute memiliki tiga bidang, `a`, `b`, dan `c`, dan Anda ingin menyinkronkan hanya bidang `c` dan `b`, Anda dapat mengonfigurasi kolom sebagai "column": ["c","b"]. Artinya, kolom pertama dan kedua dari reader diimpor ke bidang `c` dan `b` tabel MaxCompute, dan bidang `a` di baris yang baru dimasukkan ke tabel MaxCompute diatur ke null.

Menangani kesalahan konfigurasi kolom MaxCompute

Untuk memastikan keandalan data yang ditulis dan menghindari masalah kualitas data yang disebabkan oleh kehilangan data kolom tambahan, MaxCompute Writer melaporkan kesalahan jika mendeteksi kolom tambahan. Misalnya, jika tabel MaxCompute memiliki bidang `a`, `b`, dan `c`, dan MaxCompute Writer mencoba menulis lebih dari tiga kolom, kesalahan dilaporkan.

Catatan tentang konfigurasi partisi MaxCompute

MaxCompute Writer hanya mendukung penulisan data ke partisi tingkat terakhir. Tidak mendukung fitur seperti perutean partisi berdasarkan bidang tertentu. Misalnya, jika tabel memiliki tiga tingkat partisi, konfigurasi partisi harus secara eksplisit menentukan penulisan ke partisi tingkat ketiga. Misalnya, untuk menulis data ke partisi tingkat ketiga tabel, Anda dapat mengonfigurasinya sebagai pt=20150101, type=1, biz=2, tetapi tidak sebagai pt=20150101, type=1 atau pt=20150101.

Pengulangan ulang tugas MaxCompute dan failover

MaxCompute Writer memastikan idempotensi penulisan saat Anda mengonfigurasi "truncate": true. Artinya, jika operasi penulisan gagal dan tugas dijalankan lagi, MaxCompute Writer menghapus data sebelumnya dan mengimpor data baru untuk memastikan konsistensi data setelah setiap pengulangan ulang. Jika tugas terganggu oleh pengecualian lain selama eksekusi, atomisitas data tidak dapat dijamin. Data tidak dikembalikan atau dijalankan ulang secara otomatis. Anda harus menggunakan fitur idempotensi dan menjalankan ulang tugas untuk memastikan integritas data.

Catatan

Jika `truncate` diatur ke `true`, semua data di partisi atau tabel yang ditentukan dihapus. Gunakan parameter ini dengan hati-hati.

Terjadi kesalahan saat membaca data dari tabel MaxCompute (ODPS): The download session is expired.

  • Pesan kesalahan:

    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:

    Sinkronisasi offline menggunakan perintah Tunnel MaxCompute untuk mengunggah dan mengunduh data. Siklus hidup sesi Tunnel di server adalah 24 jam. Oleh karena itu, jika tugas sinkronisasi offline berjalan lebih dari 24 jam, tugas gagal dan berhenti. Untuk informasi lebih lanjut tentang Tunnel, lihat Petunjuk.

  • Solusi:

    Tingkatkan tingkat konkurensi tugas sinkronisasi offline dan rencanakan jumlah data yang akan disinkronkan untuk memastikan tugas dapat diselesaikan dalam waktu 24 jam.

Terjadi kesalahan saat menulis ke MaxCompute (ODPS): Error writing request body to server

  • Pesan kesalahan:

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

  • Kemungkinan penyebab:

    • Kemungkinan penyebab 1: Pengecualian tipe data. Data sumber tidak sesuai dengan spesifikasi tipe data ODPS. Misalnya, Anda mencoba menulis nilai `4.2223` ke bidang tipe data ODPS `decimal(18,10)`.

    • Kemungkinan penyebab 2: Pengecualian blok atau komunikasi ODPS.

  • Solusi:

    Konversi data ke tipe data yang sesuai dengan spesifikasi tipe data.

MySQL

Bagaimana cara menyinkronkan tabel MySQL yang ter-shard ke satu tabel MaxCompute?

Anda dapat mengonfigurasi ini dengan mengikuti petunjuk di Menyinkronkan tabel ter-shard.

Saat set karakter tabel MySQL tujuan adalah utf8mb4, bagaimana cara menangani karakter Tionghoa yang rusak setelah sinkronisasi?

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

Terjadi kesalahan saat menulis ke atau membaca dari MySQL: 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`: DataX membagi data dari RDS for MySQL menjadi beberapa pernyataan pengambilan data SQL (`SELECT`) yang sama berdasarkan `SplitPk`. Saat waktu eksekusi pernyataan SQL melebihi waktu eksekusi maksimum yang diizinkan di sisi RDS, kesalahan ini terjadi.

    • `net_write_timeout`: Periode timeout untuk menunggu pengiriman blok ke klien terlalu singkat.

  • Solusi:

    Tambahkan parameter `net_write_timeout` atau `net_read_timeout` ke koneksi URL sumber data dan atur nilai yang lebih besar, atau sesuaikan parameter ini di konsol RDS.

  • Saran:

    Jika tugas dapat dijalankan ulang, atur tugas untuk dijalankan ulang otomatis saat terjadi kesalahan.

数据源参数设置

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

Tugas sinkronisasi offline ke MySQL gagal dengan kesalahan: [DBUtilErrorCode-05]ErrorMessage: Code:[DBUtilErrorCode-05]Description:[Failed to write data to the configured destination table.]. - com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed

Penyebab:

Nilai default untuk parameter wait_timeout di MySQL adalah 8 jam. Jika data masih diambil saat waktu ini tercapai, tugas sinkronisasi terganggu.

Solusi:

Modifikasi file konfigurasi MySQL my.cnf (atau my.ini di Windows). Di bawah modul MySQL, tambahkan parameter berikut (dalam detik): wait_timeout=2592000 interactive_timeout=2592000. Kemudian, mulai ulang dan masuk ke MySQL lalu jalankan pernyataan berikut untuk memeriksa apakah pengaturan berhasil: show variables like '%wait_time%'.

Terjadi kesalahan saat membaca dari database MySQL: The last packet successfully received from the server was 902,138 milliseconds ago

Penggunaan CPU normal tetapi penggunaan memori tinggi dapat menyebabkan koneksi terputus.

Jika Anda memastikan bahwa tugas dapat dijalankan ulang secara otomatis, atur tugas ke Jalankan Ulang saat Terjadi Kesalahan. Untuk informasi lebih lanjut, lihat Konfigurasi properti waktu.

PostgreSQL

Terjadi kesalahan saat membaca data dari PostgreSQL: org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery

  • Skenario: Saat Anda menyinkronkan data PostgreSQL menggunakan alat sinkronisasi offline, terjadi kesalahan berikut: org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery

  • Kemungkinan penyebab: Hal ini terjadi karena menarik data dari database memerlukan waktu lama. Tingkatkan nilai parameter max_standby_archive_delay dan max_standby_streaming_delay. Untuk informasi lebih lanjut, lihat Peristiwa Server Cadangan.

RDS

Tugas sinkronisasi offline dengan sumber Amazon RDS gagal dengan kesalahan: Host is blocked

Jika menghubungkan ke Amazon RDS mengembalikan Host is blocked, Anda perlu menonaktifkan pemeriksaan kesehatan load balancer Amazon. Setelah Anda menonaktifkannya, masalah pemblokiran tidak lagi dilaporkan.

MongoDB

Mengapa saya mendapatkan kesalahan saat menambahkan sumber data MongoDB dengan pengguna root?

Kesalahan terjadi saat Anda menambahkan sumber data MongoDB dengan pengguna root karena Anda harus menggunakan nama pengguna yang dibuat di database tabel yang perlu Anda sinkronkan. Anda tidak dapat menggunakan pengguna root.

Sebagai contoh, untuk mengimpor tabel `name`, dan tabel `name` berada di database `test`, nama database di sini harus `test`, dan Anda harus menggunakan nama pengguna pengguna yang dibuat di database `test`.

Saat membaca dari MongoDB, bagaimana cara menggunakan timestamp dalam parameter kueri untuk melakukan sinkronisasi inkremental?

Anda dapat menggunakan node penugasan untuk terlebih dahulu memproses waktu tipe tanggal menjadi timestamp dan menggunakan nilai ini sebagai parameter input untuk sinkronisasi data MongoDB. Untuk informasi lebih lanjut, lihat Cara melakukan sinkronisasi inkremental pada bidang tipe timestamp di MongoDB?

Setelah menyinkronkan data dari MongoDB ke sumber data tujuan, zona waktu bergeser +8 jam. Bagaimana cara memperbaikinya?

Anda perlu mengatur zona waktu di konfigurasi MongoDB Reader. Untuk informasi lebih lanjut, lihat MongoDB Reader.

Saat membaca data dari MongoDB, catatan diperbarui di sumber tetapi tidak disinkronkan ke tujuan. Bagaimana cara menanganinya?

Anda dapat memulai ulang tugas setelah periode waktu tertentu dengan kondisi kueri tetap sama. Artinya, menunda waktu eksekusi tugas sinkronisasi tanpa mengubah konfigurasi.

Apakah MongoDB Reader peka terhadap huruf besar/kecil?

Saat membaca data, Column.name yang dikonfigurasi pengguna peka terhadap huruf besar/kecil. Jika dikonfigurasi salah, data yang dibaca adalah null. Misalnya:

  • Data sumber MongoDB:

    {
        "MY_NAME": "zhangsan"
    }
  • Konfigurasi Kolom tugas sinkronisasi:

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

Karena huruf besar/kecil dalam konfigurasi tugas sinkronisasi tidak cocok dengan data sumber, terjadi pengecualian pembacaan data.

Bagaimana cara mengonfigurasi durasi timeout untuk MongoDB Reader?

Parameter konfigurasi timeout adalah cursorTimeoutInMs, dengan nilai default 600.000 ms (10 menit). Parameter ini mewakili total waktu yang dibutuhkan server MongoDB untuk mengeksekusi kueri, tidak termasuk waktu transmisi data. Jika jumlah data yang dibaca dalam tarikan penuh besar, hal ini dapat menyebabkan kesalahan: MongoDBReader$Task - operation exceeded time limitcom.mongodb.MongoExecutionTimeoutException: operation exceeded time limit.

Terjadi kesalahan saat membaca dari MongoDB: no master

Saat ini, tugas sinkronisasi DataWorks tidak mendukung pembacaan data dari node sekunder. Jika Anda mengonfigurasi pembacaan dari node sekunder, kesalahan no master dilaporkan.

Terjadi kesalahan saat membaca dari MongoDB: MongoExecutionTimeoutException: operation exceeded time limit

  • Analisis penyebab:

    Kesalahan ini disebabkan oleh timeout kursor.

  • Solusi:

    Tingkatkan nilai parameter cursorTimeoutInMs.

Tugas sinkronisasi offline yang membaca dari MongoDB gagal dengan kesalahan: DataXException: operation exceeded time limit

Anda perlu meningkatkan tingkat konkurensi tugas dan `BatchSize` untuk membaca.

Tugas sinkronisasi MongoDB gagal dengan kesalahan: no such cmd splitVector

  • Penyebab potensial:

    Saat tugas sinkronisasi berjalan, tugas tersebut menggunakan perintah splitVector untuk pembagian tugas secara default. Beberapa versi MongoDB tidak mendukung perintah splitVector, yang menyebabkan kesalahan no such cmd splitVector.

  • Solusi:

    1. Buka halaman konfigurasi tugas sinkronisasi dan klik tombol Konversi ke skrip 转换脚本. Ubah tugas ke editor kode.

    2. Di konfigurasi parameter MongoDB, tambahkan parameter

      "useSplitVector" : false

      untuk menghindari penggunaan splitVector.

Tugas sinkronisasi offline MongoDB gagal dengan kesalahan: After applying the update, the (immutable) field '_id' was found to have been altered to _id: "2"

  • Gejala:

    Masalah ini dapat terjadi dalam tugas sinkronisasi, misalnya di antarmuka tanpa kode, jika Write Mode (Overwrite) diatur ke Yes dan bidang selain _id dikonfigurasi sebagai Business Primary Key.写入模式报错

  • Penyebab potensial:

    Data berisi catatan yang _id-nya tidak cocok dengan Business Primary Key yang dikonfigurasi (seperti my_id dalam contoh konfigurasi di atas).

  • Solusi:

    • Solusi 1: Modifikasi tugas sinkronisasi offline untuk memastikan bahwa Business Primary Key yang dikonfigurasi konsisten dengan _id.

    • Solusi 2: Gunakan _id sebagai kunci utama bisnis untuk sinkronisasi data.

Redis

Saat menulis ke Redis dalam mode hash, terjadi kesalahan: Code:[RedisWriter-04], Description:[Dirty data]. - source column number is in valid!

  • Penyebab:

    Saat Redis menggunakan mode hash untuk penyimpanan, atribut dan nilai hash harus muncul berpasangan. Misalnya: odpsReader: "column":[ "id", "name", "age", "address" ]. Di tujuan, RedisWriter dikonfigurasi dengan `"keyIndexes":[ 0, 1]`. Di Redis, `id` dan `name` digunakan sebagai kunci, `age` sebagai atribut, dan `address` sebagai nilai, disimpan dalam tipe hash. Jika sumber ODPS dikonfigurasi hanya dengan dua kolom, Anda tidak dapat menggunakan mode hash untuk menyimpan cache Redis, dan pengecualian ini dilaporkan.

  • Solusi:

    Jika Anda hanya ingin menggunakan dua kolom, konfigurasikan Redis untuk menyimpan informasi dalam mode String. Jika Anda harus menggunakan mode hash, konfigurasikan setidaknya tiga kolom di sumber.

OSS

Saat membaca file CSV dengan beberapa pemisah, bagaimana cara menangani data kotor?

  • Gejala:

    Saat Anda mengonfigurasi tugas sinkronisasi offline untuk membaca data dari penyimpanan file seperti OSS atau FTP, jika file dalam format CSV dan menggunakan beberapa karakter sebagai pemisah kolom (misalnya, |,, ##, atau ;;), tugas dapat gagal dengan kesalahan "data kotor". Di log eksekusi tugas, Anda akan melihat kesalahan serupa IndexOutOfBoundsException (indeks array di luar batas), dan data kotor dihasilkan.

  • Analisis penyebab:

    Reader csv bawaan DataWorks ("fileFormat": "csv") memiliki keterbatasan saat menangani pemisah yang terdiri dari beberapa karakter, yang menyebabkan pembagian kolom data baris tidak akurat.

  • Solusi:

    • Antarmuka tanpa kode: Beralihlah ke tipe teks dan tentukan secara eksplisit pemisah multi-karakter Anda.

    • Editor kode: Ubah "fileFormat": "csv" menjadi "fileFormat": "text" dan atur pemisah dengan benar: "fieldDelimiter":"<multi-delimiter>", "fieldDelimiterOrigin":"<multi-delimiter>".

Apakah ada batasan jumlah file yang dapat dibaca dari OSS?

Sinkronisasi offline itu sendiri tidak membatasi jumlah file yang dapat dibaca oleh plugin reader OSS. Batasan utama pada pembacaan file berasal dari konsumsi sumber daya (CU) tugas itu sendiri. Membaca terlalu banyak file sekaligus dapat dengan mudah menyebabkan kesalahan kehabisan memori. Oleh karena itu, kami menyarankan agar Anda tidak mengatur parameter objek ke `*` untuk mencegah kesalahan OutOfMemoryError: Java heap space .

Saat menulis ke OSS, bagaimana cara menghapus string acak yang muncul di nama file?

OSS Writer menggunakan nama file untuk mensimulasikan struktur direktori. OSS memiliki batasan berikut pada nama objek: jika Anda menggunakan `"object": "datax"`, objek yang ditulis dimulai dengan `datax`, dan string acak ditambahkan sebagai akhiran. Jumlah file ditentukan oleh jumlah tugas ter-shard aktual.

Jika Anda tidak ingin akhiran UUID acak, atur `"writeSingleObject" : "true"`. Untuk informasi lebih lanjut, lihat deskripsi `writeSingleObject` di dokumentasi sumber data OSS.

Terjadi kesalahan saat membaca data dari OSS: AccessDenied The bucket you access does not belong to you.

  • Penyebab:

    Akun AccessKey yang dikonfigurasi untuk sumber data tidak memiliki izin yang diperlukan pada bucket.

  • Solusi:

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

Hive

Tugas sinkronisasi offline ke instance Hive lokal gagal dengan kesalahan: Could not get block locations.

  • Analisis penyebab:

    Parameter mapred.task.timeout mungkin diatur ke nilai yang terlalu singkat, yang menyebabkan Hadoop menghentikan tugas dan membersihkan direktori sementara. Hal ini mengakibatkan data sementara tidak ditemukan.

  • Solusi:

    Di pengaturan sumber data untuk tugas sinkronisasi offline, jika Anda memilih Read Data Based On Hive JDBC (supports Conditional Filtering) untuk Read Hive Method, Anda dapat mengatur parameter mapred.task.timeout di bidang Session Configuration. Misalnya: mapred.task.timeout=600000.

DataHub

Saat menulis ke DataHub, bagaimana cara menangani kegagalan penulisan yang disebabkan oleh melebihi batas data penulisan tunggal?

  • Pesan kesalahan:

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

  • Kemungkinan penyebab:

    Kesalahan disebabkan karena jumlah data yang dikirimkan ke DataHub oleh DataX dalam satu batch melebihi batas DataHub. Parameter konfigurasi yang memengaruhi jumlah data yang dikirimkan ke DataHub terutama:

    • maxCommitSize: Ukuran maksimum buffer data dalam megabyte (MB) sebelum data dikirimkan ke tujuan dalam satu batch. Nilai default adalah 1 MB (1.048.576 byte).

    • batchSize: Jumlah catatan data yang diakumulasi di buffer DataX-On-Flume. Saat jumlah catatan yang terakumulasi mencapai `batchSize` yang ditentukan, catatan tersebut dikirimkan ke tujuan sebagai satu batch.

  • Solusi:

    Kurangi parameter maxCommitSize dan batchSize.

LogHub

Saat membaca dari LogHub, bidang yang berisi data disinkronkan sebagai kosong

Plugin ini peka terhadap huruf besar/kecil untuk nama bidang. Periksa konfigurasi kolom reader LogHub.

Data hilang saat membaca dari LogHub

Integrasi Data menggunakan waktu data masuk ke LogHub. Di konsol LogHub, periksa apakah bidang metadata `receive_time` berada dalam rentang waktu yang dikonfigurasi untuk tugas.

Saat membaca dari LogHub, bidang yang dipetakan tidak sesuai harapan

Jika hal ini terjadi, edit kolom secara manual di antarmuka.

Lindorm

Saat menggunakan metode bulk Lindorm untuk menulis data, apakah data historis diganti setiap kali?

Logikanya sama dengan metode penulisan API. Data di baris dan kolom yang sama ditimpa, sedangkan data lain tetap tidak berubah.

Elasticsearch

Bagaimana cara mengkueri semua bidang di bawah indeks ES?

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

  • Perintah Kueri Shell:

    //es7
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/_mapping'
    //es6
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/typename/_mapping'
  • Dapatkan bidang dari hasil:

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

    Dalam hasil yang dikembalikan, bagian `properties` berisi semua bidang dan definisi propertinya untuk indeks tersebut. Indeks di atas berisi tiga bidang: `field1`, `field2`, dan `field3`.

Saat menyinkronkan data offline dari ES ke sumber data lain, nama indeks berubah setiap hari. Bagaimana cara mengonfigurasinya?

Anda dapat menambahkan variabel penjadwalan tanggal ke konfigurasi indeks. Hal ini memungkinkan string indeks dihitung berdasarkan tanggal berbeda, yang memungkinkan perubahan otomatis pada nama indeks Elasticsearch Reader. Proses konfigurasi mencakup tiga langkah: mendefinisikan variabel tanggal, mengonfigurasi variabel indeks, dan menerbitkan serta mengeksekusi tugas.

  1. Definisikan variabel tanggal: Di konfigurasi penjadwalan tugas sinkronisasi, pilih Tambah Parameter untuk mendefinisikan variabel tanggal. Dalam contoh di bawah, `var1` dikonfigurasi untuk mewakili waktu eksekusi tugas (hari ini), dan `var2` mewakili stempel waktu data tugas (hari sebelumnya). 定义日期变量

  2. Konfigurasikan variabel indeks: Beralihlah ke editor kode dan konfigurasikan indeks Elasticsearch Reader. Format konfigurasi adalah: `${variable_name}`, seperti yang ditunjukkan pada gambar di bawah.配置索引变量

  3. Terbitkan dan eksekusi tugas: Setelah validasi, kirim dan terbitkan tugas ke Pusat Operasi, lalu jalankan menggunakan jadwal berulang atau pengisian ulang data.

    1. Klik tombol Run With Parameters untuk menjalankan tugas untuk validasi. Tindakan ini menggantikan parameter sistem penjadwalan dalam konfigurasi tugas. Setelah tugas selesai, periksa log untuk memverifikasi bahwa indeks yang disinkronkan sesuai harapan.

      Catatan

      Saat Anda menjalankan dengan parameter, masukkan langsung nilai parameter untuk pengujian.

      运行运行

    2. Jika validasi berhasil, Anda dapat mengklik Save dan Submit untuk menambahkan tugas sinkronisasi ke lingkungan produksi.提交任务

      Untuk proyek standar, klik tombol Publish untuk membuka pusat penerbitan dan menerbitkan tugas sinkronisasi ke lingkungan produksi.发布

  4. Hasil: Gambar berikut menunjukkan konfigurasi dan hasil indeks aktual dari eksekusi.

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

    Indeks yang dijalankan diganti menjadi: esstress_1_20230106_20230105.

    运行结果

Bagaimana cara Elasticsearch Reader menyinkronkan properti bidang Object atau Nested? (misalnya, menyinkronkan object.field1)

Untuk menyinkronkan properti bidang objek, Anda harus menggunakan editor kode. Di editor kode, konfigurasikan `multi` sebagai berikut, dan konfigurasikan kolom menggunakan format `property.sub-property`.

"multi":{
   "multi":true 
 }

Anda dapat merujuk pada contoh berikut untuk konfigurasi:

#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 Writer: 1 baris dengan 3 kolom. Urutan kolom sama dengan konfigurasi reader.
KOLON               NILAI
level1:             {"level2":[{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}]}
level1.level2:      [{"level3":"testlevel3_1"},{"level3":"testlevel3_2"}]
level1.level2[0]:   {"level3":"testlevel3_1"}

Setelah menyinkronkan tipe string dari ODPS ke ES, tanda kutip di sekitarnya hilang. Bagaimana cara memperbaikinya? Dapatkah string tipe JSON dari sumber disinkronkan sebagai objek NESTED di ES?

  1. Tanda kutip ganda tambahan di sekitar karakter adalah masalah tampilan di alat Kibana. Data aktual tidak memiliki tanda kutip ganda di sekitarnya. Anda dapat menggunakan perintah curl atau Postman untuk melihat data aktual. Perintah curl untuk mendapatkan data adalah sebagai berikut:

    //es7
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/_mapping'
    //es6
    curl -u username:password --request GET 'http://esxxx.elasticsearch.aliyuncs.com:9200/indexname/typename/_mapping'

    结果

  2. Anda dapat mengonfigurasi tipe bidang tulis ES sebagai `nested` untuk menyinkronkan data string tipe JSON dari ODPS ke ES dan menyimpannya dalam format bersarang. Contoh berikut menyinkronkan bidang `name` ke ES dalam format bersarang.

    • Konfigurasi sinkronisasi: Konfigurasikan tipe `name` sebagai nested.同步配置

    • Hasil sinkronisasi: `name` adalah tipe objek bersarang.同步结果

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

Ada dua cara untuk mengonfigurasi penulisan ke ES sebagai tipe array. Anda dapat memilih metode sinkronisasi yang sesuai berdasarkan format data sumber.

  • Tulis ke ES sebagai tipe array dengan mengurai data sumber dalam format JSON. Misalnya, jika data sumber adalah `"[1,2,3,4,5]"`, konfigurasikan json_array=true untuk mengurai data sumber dan menulisnya ke bidang ES sebagai array. Atur ColumnList ke json_array=true.

    • Konfigurasi antarmuka tanpa kode:Codeless UI configuration

    • Konfigurasi editor kode:

      "column":[
        {
          "name":"docs",
          "type":"keyword",
          "json_array":true
        }
      ]
  • Tulis ke ES sebagai tipe array dengan mengurai data sumber menggunakan pemisah. Misalnya, jika data sumber adalah `"1,2,3,4,5"`, konfigurasikan pemisah `splitter=","` untuk mengurai dan menulisnya ke bidang ES sebagai array.

    • Batasan:

      • Hanya satu jenis pemisah yang didukung per tugas. Pemisah bersifat unik secara global. Anda tidak dapat mengonfigurasi pemisah berbeda untuk beberapa bidang Array. Misalnya, jika kolom sumber adalah col1="1,2,3,4,5" , col2="6-7-8-9-10", Anda tidak dapat mengonfigurasi pemisah terpisah untuk setiap kolom.

      • Pemisah dapat berupa ekspresi reguler. Misalnya, jika nilai kolom sumber adalah `"6-,-7-,-8+,*9-,-10"`, Anda dapat mengonfigurasi `splitter:".,."`. Hal ini didukung di antarmuka tanpa kode.

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

    • Konfigurasi editor kode:

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

Saat menulis data ke ES, pengiriman dilakukan tanpa nama pengguna, tetapi validasi nama pengguna tetap diperlukan, menyebabkan pengiriman gagal dan semua data yang diminta dicatat. Hal ini menghasilkan banyak log audit setiap hari. Bagaimana cara menanganinya?

  • Analisis penyebab:

    HttpClient telah dikonfigurasi sebelumnya untuk pertama kali membuat permintaan tanpa kredensial setiap kali koneksi dibuat. Setelah menerima persyaratan otorisasi dan menentukan metode autentikasi berdasarkan respons, permintaan kemudian dibuat dengan kredensial. Koneksi perlu dibuat setiap kali data ditulis ke ES, sehingga ada satu permintaan tanpa kredensial untuk setiap penulisan. Hal ini menyebabkan setiap penulisan data dicatat di log audit.

  • Solusi:

    Anda perlu menambahkan konfigurasi "preemptiveAuth":true di editor kode.

Bagaimana cara menyinkronkan data ke ES sebagai tipe Date?

Ada dua cara untuk mengonfigurasi penulisan tanggal. Anda dapat memilih sesuai kebutuhan.

  • Menulis langsung konten bidang yang dibaca oleh reader ke bidang Date ES:

    • Konfigurasikan `origin:true` untuk menulis konten yang dibaca langsung ke ES.

    • Konfigurasikan `"format"` untuk menentukan atribut format untuk bidang saat Anda membuat pemetaan menggunakan penulisan ES.

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

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

Elasticsearch Writer gagal menulis data karena versi eksternal yang ditentukan. Bagaimana cara menanganinya?

  • Jika Anda telah mengonfigurasi `type:version`, ES saat ini tidak mendukung penentuan versi eksternal.

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

    Anda perlu menghapus konfigurasi `"type":"version"`. Elasticsearch Writer saat ini tidak mendukung penentuan versi eksternal.

Tugas sinkronisasi offline yang membaca dari Elasticsearch gagal dengan kesalahan: ERROR ESReaderUtil - ES_MISSING_DATE_FORMAT, Unknown date value. please add "dataFormat". sample value:

  • Analisis penyebab:

    Elasticsearch Reader tidak dapat mengurai format tanggal bidang tipe tanggal karena pemetaan untuk bidang tanggal yang sesuai di sumber data ES tidak memiliki format yang dikonfigurasi.

  • Solusi:

    • Konfigurasikan parameter `dateFormat` dengan format yang sama seperti format bidang tanggal ES, dipisahkan oleh "||". Format harus mencakup semua format tipe tanggal. Misalnya:

      "parameter" : {
            "column": [
           			"dateCol1",
              	"dateCol2",
                "otherCol"
            ],
           "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss",
      }
    • Atur pemetaan untuk semua bidang tanggal di database ES ke format.

Tugas sinkronisasi offline yang membaca dari Elasticsearch gagal dengan kesalahan: com.alibaba.datax.common.exception.DataXException: Code:[Common-00].

  • Analisis penyebab:

    Karena batasan kata kunci fastjson, mungkin ada kata kunci seperti `$ref` di indeks atau kolom.

  • Solusi:

    Elasticsearch Reader saat ini tidak mendukung sinkronisasi indeks dengan kata kunci `$ref` di bidangnya. Untuk informasi lebih lanjut, lihat Elasticsearch Reader.

Tugas sinkronisasi offline yang menulis ke Elasticsearch gagal dengan kesalahan: version_conflict_engine_exception.

  • Analisis penyebab:

    Mekanisme kunci optimis ES dipicu. Nomor versi saat ini seharusnya xxx, tetapi perintah pembaruan melewatkan nomor versi yang berbeda, yang menyebabkan konflik versi. Saat data diperbarui, proses lain sedang menghapus data indeks.

  • Solusi:

    1. Periksa dan pastikan apakah terjadi perilaku penghapusan data.

    2. Ubah metode sinkronisasi tugas dari Update ke Index.

Tugas sinkronisasi offline yang menulis ke Elasticsearch gagal dengan kesalahan: illegal_argument_exception.

  • Analisis penyebab:

    Saat Anda mengonfigurasi properti lanjutan seperti `similarity` atau `properties` untuk bidang Kolom, `other_params` diperlukan agar plugin dapat mengenalinya.原因

  • Solusi:

    Konfigurasikan other_params di Kolom, dan tambahkan `similarity` di dalam other_params, seperti yang ditunjukkan di bawah:

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

Tugas sinkronisasi offline dari bidang Array ODPS ke Elasticsearch gagal dengan kesalahan: dense_vector

  • Analisis penyebab:

    Saat ini, sinkronisasi offline ke Elasticsearch tidak mendukung tipe dense_vector. Hanya tipe berikut yang didukung:

    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 menangani tipe yang tidak didukung oleh Elasticsearch Writer:

    • Jangan gunakan Elasticsearch Writer untuk membuat pemetaan indeks. Gunakan pemetaan yang dibuat pelanggan sebagai gantinya.

    • Ubah tipe yang sesuai menjadi `NESTED`.

    • Modifikasi konfigurasi menjadi: dynamic = true dan cleanup=false.

Mengapa pengaturan yang dikonfigurasi di Elasticsearch Writer tidak berlaku saat membuat indeks?

  • 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 berlaku saat indeks dibuat. Pembuatan indeks terjadi dalam dua kasus: saat indeks tidak ada, dan saat cleanup=true. Saat cleanup=true, konfigurasi Pengaturan tidak perlu menggunakan `"index"`.

Mengapa properti tipe bersarang di indeks buatan saya berubah menjadi tipe keyword setelah pembuatan otomatis? (Pembuatan otomatis mengacu pada menjalankan tugas sinkronisasi dengan cleanup=true dikonfigurasi.)

#Pemetaan asli
{
  "name":"box_label_ret",
  "properties":{
    "box_id":{
      "type":"keyword"
    }
}
#Setelah pembuatan ulang cleanup=true, menjadi
{
    "box_label_ret": {
      "properties": {
        "box_id": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }}}}
}
  • Analisis penyebab:

    Untuk tipe bersarang, Elasticsearch Writer hanya menggunakan pemetaan tingkat atas, yang memungkinkan ES menyesuaikan tipe komposit di bawahnya. Mengubah tipe properti menjadi `text` dan menambahkan `fields:keyword` adalah perilaku adaptif ES dan tidak memengaruhi penggunaannya. Jika Anda khawatir tentang format pemetaan ini, lihat Kemampuan tugas sinkronisasi Integrasi Data.

  • Solusi:

    Sebelum sinkronisasi, buat pemetaan indeks ES yang diharapkan, lalu atur parameter pembersihan tugas sinkronisasi ES ke false dan jalankan tugas sinkronisasi.

Kafka

Saat membaca dari Kafka, endDateTime dikonfigurasi untuk menentukan rentang data, tetapi data di luar waktu ini ditemukan di tujuan

Kafka Reader membaca data secara batch. Jika batch data berisi catatan yang melebihi endDateTime, sinkronisasi berhenti, tetapi data yang melebihi endDateTime ini juga ditulis ke sumber data tujuan.

  • Anda dapat menggunakan item konfigurasi `skipExceedRecord` untuk menentukan apakah akan menyinkronkan data berlebih ini. Untuk informasi lebih lanjut tentang cara menggunakannya, lihat Kafka Reader. [Kami menyarankan agar Anda tidak mengatur ini untuk tidak menyinkronkan, karena dapat menyebabkan kehilangan data.]

  • Anda dapat mengonfigurasi parameter `max.poll.records` Kafka untuk menentukan jumlah data yang ditarik sekaligus. Dikombinasikan dengan tingkat konkurensi, hal ini dapat mengontrol jumlah data berlebih yang berpotensi. Jumlah data berlebih kurang dari `max.poll.records` × tingkat konkurensi.

Mengapa tugas dengan jumlah data kecil di Kafka terus berjalan lama tanpa membaca data atau selesai?

  • Analisis penyebab:

    Jumlah data kecil atau distribusi data yang tidak merata menyebabkan beberapa partisi Kafka tidak memiliki data baru, atau data baru belum mencapai offset akhir yang ditentukan untuk dibaca. Karena kondisi keluar tugas adalah bahwa semua partisi harus mencapai offset akhir yang ditentukan, partisi "menganggur" ini tidak dapat memenuhi kondisi, yang menghambat penyelesaian normal seluruh tugas.

  • Solusi:

    Dalam kasus ini, atur Kebijakan Akhir Sinkronisasi ke: Berhenti jika tidak ada data baru yang dibaca selama 1 menit (di editor kode, atur parameter stopWhenPollEmpty ke true dan parameter stopWhenReachEndOffset ke true). Hal ini memungkinkan tugas keluar segera setelah membaca data offset terbaru dari semua partisi dan menghindari eksekusi kosong. Namun, perhatikan bahwa jika catatan dengan stempel waktu lebih awal dari offset akhir yang dikonfigurasi ditulis ke partisi setelah tugas selesai, catatan tersebut tidak akan dikonsumsi.

RestAPI

RestAPI Writer melaporkan kesalahan: The JSON string found through path:[] is not an array type

RestAPI Writer menyediakan dua mode penulisan. Saat Anda menyinkronkan beberapa catatan data, Anda perlu mengonfigurasi `dataMode` sebagai `multiData`. Untuk informasi lebih lanjut, lihat RestAPI Writer. Anda juga perlu menambahkan parameter `dataPath:"data.list"` di skrip RestAPI Writer.参数

Penting

Anda tidak perlu menambahkan awalan "data.list" saat mengonfigurasi Kolom.

Konfigurasi OTS Writer

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

  1. Konfigurasi OTS Writer harus mencakup dua baris berikut:

    "newVersion": "true",
    "enableAutoIncrement": "true",
  2. OTS Writer tidak perlu dikonfigurasi dengan nama kolom kunci utama auto-increment.

  3. Jumlah entri primaryKey + jumlah entri column yang dikonfigurasi di OTS Writer harus sama dengan jumlah kolom dalam data OTS Reader upstream.

Konfigurasi model deret waktu

Dalam konfigurasi model deret waktu, apa arti bidang _tag dan is_timeseries_tag?

Contoh: Catatan data memiliki tiga tag: `[phone=Xiaomi, memory=8G, camera=Leica]`.数据

  • Contoh ekspor data (OTS Reader)

    • Jika Anda ingin menggabungkan tag di atas menjadi satu kolom untuk diekspor, konfigurasikan sebagai berikut:

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

      DataWorks mengekspor tag sebagai satu kolom data, dalam format berikut:

      ["phone=xiaomi","camera=LEICA","RAM=8G"]
    • Jika Anda ingin mengekspor tag phone dan camera sehingga setiap tag berada di kolom terpisah, gunakan konfigurasi berikut:

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

      Dua kolom data berikut diperoleh:

      xiaomi, LEICA
  • Contoh impor data (OTS Writer)

    Anggaplah sumber data upstream (Reader) memiliki dua kolom data:

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

    • Kolom lainnya adalah: 6499.

    Jika Anda ingin menambahkan kedua kolom ini ke tag, dengan format bidang tag yang diharapkan setelah penulisan seperti yang ditunjukkan di bawah: 格式Maka konfigurasikan sebagai berikut:

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

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

Nama tabel kustom

Bagaimana cara menyesuaikan nama tabel untuk tugas sinkronisasi offline?

Jika nama tabel Anda mengikuti pola reguler, seperti orders_20170310, orders_20170311, dan orders_20170312, dibedakan berdasarkan hari, dan memiliki struktur tabel yang konsisten, Anda dapat menggabungkan parameter penjadwalan dengan konfigurasi editor kode untuk menyesuaikan nama tabel. Hal ini memungkinkan Anda membaca data tabel hari sebelumnya dari database sumber secara otomatis setiap pagi.

Sebagai contoh, jika hari ini adalah 15 Maret 2017, tugas secara otomatis membaca data dari tabel orders_20170314 dan mengimpornya.自定义表名

Di editor kode, ubah nama tabel sumber menjadi variabel, misalnya, orders_${tablename}. Karena nama tabel dibedakan berdasarkan hari dan Anda perlu membaca data hari sebelumnya setiap hari, di konfigurasi parameter tugas, tetapkan variabel sebagai tablename=${yyyymmdd}.

Catatan

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

Modifikasi tabel dan penambahan kolom

Bagaimana cara menangani penambahan atau modifikasi kolom di tabel sumber tugas sinkronisasi offline?

Buka halaman konfigurasi tugas sinkronisasi dan modifikasi pemetaan bidang untuk memperbarui bidang yang berubah di konfigurasi tugas. Setelah itu, Anda perlu mengirim ulang dan mengeksekusi tugas agar perubahan berlaku.

Masalah konfigurasi tugas

Saat mengonfigurasi node sinkronisasi offline, saya tidak dapat melihat semua tabel. Bagaimana cara menanganinya?

Saat Anda mengonfigurasi node sinkronisasi offline, area Pilih Sumber hanya menampilkan 25 tabel pertama di sumber data yang dipilih secara default. Jika ada lebih banyak tabel, Anda dapat mencari berdasarkan nama tabel atau menggunakan editor kode untuk pengembangan.

Kata kunci nama tabel/kolom

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

  • Penyebab: Kolom berisi kata tercadang, atau konfigurasi kolom berisi bidang yang dimulai dengan angka.

  • Solusi: Beralihlah ke tugas sinkronisasi Integrasi Data ke editor kode dan hindari bidang khusus dalam konfigurasi kolom. Untuk informasi lebih lanjut tentang cara mengonfigurasi tugas di editor kode, lihat Konfigurasi node sinkronisasi di editor kode.

    • Karakter escape untuk MySQL adalah `keyword`.

    • Karakter escape untuk Oracle dan PostgreSQL adalah "keyword".

    • Karakter escape untuk SQL Server adalah [keyword].

    Contoh MySQL:字段冲突

  • Ambil sumber data MySQL sebagai contoh:

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

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

      Catatan
      • `table` adalah kata kunci MySQL. Kode yang dihasilkan selama sinkronisasi data menyebabkan kesalahan. Oleh karena itu, Anda perlu membuat tampilan untuk memberikan alias ke kolom `table`.

      • Jangan gunakan kata kunci sebagai nama kolom tabel.

    3. Dengan menjalankan pernyataan di atas, Anda dapat memberikan alias ke kolom yang memiliki kata kunci. Saat Anda mengonfigurasi tugas sinkronisasi, pilih tampilan `v_aliyun` alih-alih tabel `aliyun`.

Pemetaan bidang

Tugas offline gagal dengan kesalahan: plugin xx does not specify column

Kesalahan ini dapat terjadi karena pemetaan bidang tugas sinkronisasi tidak dikonfigurasi dengan benar, atau kolom plugin tidak dikonfigurasi dengan benar.

  1. Periksa apakah pemetaan bidang dikonfigurasi.

  2. Periksa apakah kolom plugin dikonfigurasi dengan benar.

Untuk sumber data tidak terstruktur, bidang tidak dapat dipetakan saat saya mengklik Pratinjau Data. Bagaimana cara menanganinya?

  • Gejala:

    Saat Anda mengklik Data Preview, pesan berikut ditampilkan, menunjukkan bahwa bidang melebihi ukuran byte maksimum.

    问题现象

  • Penyebab: Untuk menghindari kesalahan kehabisan memori (OOM), layanan sumber data memeriksa panjang bidang saat memproses permintaan pratinjau data. Jika satu kolom melebihi 1.000 byte, pesan di atas muncul. Pesan ini tidak memengaruhi operasi normal tugas. Anda dapat mengabaikan kesalahan ini dan menjalankan tugas sinkronisasi offline secara langsung.

    Catatan

    Jika file ada dan konektivitas normal, alasan lain kegagalan pratinjau data meliputi:

    • Ukuran byte satu baris di file melebihi batas 10 MB. Dalam hal ini, tidak ada data yang ditampilkan, mirip dengan pesan di atas.

    • Jumlah kolom di satu baris file melebihi batas 1.000. Dalam hal ini, hanya 1.000 kolom pertama yang ditampilkan, dan pesan ditunjukkan di kolom ke-1001.

Ubah TTL

Untuk tabel data yang disinkronkan, apakah TTL hanya dapat diubah menggunakan metode ALTER?

Waktu hidup (TTL) diatur pada tabel. Tidak ada opsi seperti ini di konfigurasi tugas sinkronisasi.

Agregasi fungsi

Saat menyinkronkan melalui API, apakah didukung untuk menggunakan fungsi sisi sumber (misalnya, MaxCompute) untuk agregasi? Misalnya, jika tabel sumber memiliki kolom a dan b sebagai kunci utama untuk Lindorm

Sinkronisasi API tidak mendukung penggunaan fungsi sisi sumber. Anda perlu memproses data menggunakan fungsi di sisi sumber terlebih dahulu, lalu mengimpor data tersebut.