Sumber data OSS menyediakan saluran dua arah untuk membaca dan menulis data ke OSS. Topik ini menjelaskan cara DataWorks melakukan sinkronisasi data dengan sumber data OSS.
Tipe field dan batasan yang didukung
Baca offline
OSS Reader membaca data dari OSS, layanan penyimpanan data tidak terstruktur, lalu mengonversinya ke protokol Data Integration. OSS Reader mendukung fitur-fitur berikut.
Didukung | Tidak didukung |
|
|
Saat menyiapkan data di OSS, jika datanya berada dalam file CSV, file tersebut harus dalam format CSV standar. Misalnya, jika suatu kolom berisi tanda kutip ganda ("), Anda harus menggantinya dengan dua tanda kutip ganda (""). Jika tidak, file mungkin terpisah secara salah. Jika file berisi beberapa pemisah, gunakan tipe file teks.
OSS merupakan sumber data tidak terstruktur. Sebelum melakukan sinkronisasi data, pastikan struktur field sesuai harapan. Demikian pula, jika struktur data di sumber berubah, Anda harus memperbarui struktur field dalam konfigurasi tugas. Jika tidak, data mungkin menjadi rusak selama sinkronisasi.
Tulis offline
OSS Writer mengonversi data dari protokol sinkronisasi data menjadi file teks dan menuliskannya ke OSS, layanan penyimpanan data tidak terstruktur. OSS Writer mendukung fitur-fitur berikut.
Didukung | Tidak didukung |
|
|
Kategori tipe | Tipe konfigurasi kolom Data Integration |
Integer | LONG |
String | STRING |
Floating-point | DOUBLE |
Boolean | BOOLEAN |
Tanggal dan waktu | DATE |
Tulis real-time
Penulisan real-time didukung.
Penulisan real-time dari satu tabel ke data lake, seperti Hudi (0.12.x), Paimon, dan Iceberg, didukung.
Buat sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen sumber data. Anda dapat melihat infotips parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Saat membuat sumber data OSS untuk akses lintas akun, Anda harus memberikan izin yang diperlukan kepada akun terkait. Untuk informasi lebih lanjut, lihat Gunakan kebijakan bucket untuk menerapkan akses lintas akun ke OSS.
Untuk menggunakan peran RAM dalam mengonfigurasi sumber data OSS, lihat Konfigurasi sumber data menggunakan peran RAM untuk otorisasi.
Saat membuat sumber data OSS untuk koneksi lintas wilayah, Anda harus menggunakan Titik akhir publik. Untuk informasi lebih lanjut, lihat Ikhtisar titik akhir dan konektivitas jaringan.
Kembangkan tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Konfigurasi tugas sinkronisasi offline untuk satu tabel
Untuk informasi lebih lanjut, lihat Konfigurasi tugas di antarmuka tanpa kode dan Konfigurasi tugas di editor kode.
Untuk daftar lengkap parameter dan demo skrip untuk editor kode, lihat Lampiran: Demo skrip dan deskripsi parameter.
Konfigurasi tugas sinkronisasi real-time untuk satu tabel
Untuk informasi lebih lanjut, lihat Konfigurasi tugas sinkronisasi real-time di Data Integration dan Konfigurasi tugas sinkronisasi real-time di DataStudio.
Konfigurasi tugas sinkronisasi basis data penuh
Untuk informasi lebih lanjut, lihat Tugas sinkronisasi offline basis data penuh dan Tugas sinkronisasi real-time basis data penuh.
FAQ
Apakah ada batasan jumlah file OSS yang dapat dibaca?
Bagaimana cara menangani data kotor saat membaca file CSV yang memiliki beberapa pemisah?
Lampiran: Demo skrip dan deskripsi parameter
Konfigurasi tugas sinkronisasi batch menggunakan editor kode
Jika ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasi tugas di editor kode. Informasi berikut menjelaskan parameter yang harus dikonfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Demo skrip Reader: Contoh umum
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"oss",// Nama plugin.
"parameter":{
"nullFormat":"",// Mendefinisikan string yang dapat diinterpretasikan sebagai null.
"compress":"",// Jenis kompresi teks.
"datasource":"",// Sumber data.
"column":[// Field.
{
"index":0,// Indeks kolom.
"type":"string"// Tipe data.
},
{
"index":1,
"type":"long"
},
{
"index":2,
"type":"double"
},
{
"index":3,
"type":"boolean"
},
{
"format":"yyyy-MM-dd HH:mm:ss", // Format waktu.
"index":4,
"type":"date"
}
],
"skipHeader":"",// Menentukan apakah akan melewati header dalam file mirip CSV.
"encoding":"",// Format encoding.
"fieldDelimiter":",",// Pemisah kolom.
"fileFormat": "",// Jenis teks.
"object":[]// Awalan objek.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":""// Jumlah catatan data kotor yang diizinkan.
},
"speed":{
"throttle":true,// Jika Anda mengatur throttle ke false, parameter mbps tidak berlaku dan tidak ada batasan laju. Jika Anda mengatur throttle ke true, batasan laju diterapkan.
"concurrent":1, // Jumlah pekerjaan konkuren.
"mbps":"12"// Batasan laju. 1 Mbps setara dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Demo skrip Reader: Membaca file ORC atau Parquet dari OSS
Untuk membaca file dalam format ORC atau Parquet dari OSS, DataWorks menggunakan kembali HDFS Reader. Selain parameter OSS Reader yang sudah ada, parameter konfigurasi tambahan seperti Path (ORC) dan FileFormat (ORC, Parquet) juga didukung.
Contoh berikut menunjukkan cara membaca file ORC dari OSS.
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "orc", "path": "/tests/case61/orc__691b6815_9260_4037_9899_****", "column": [ { "index": 0, "type": "long" }, { "index": "1", "type": "string" }, { "index": "2", "type": "string" } ] } }Contoh berikut menunjukkan cara membaca file Parquet dari OSS.
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"oss", "parameter":{ "nullFormat":"", "compress":"", "fileFormat":"parquet", "path":"/*", "parquetSchema":"message m { optional BINARY registration_dttm (UTF8); optional Int64 id; optional BINARY first_name (UTF8); optional BINARY last_name (UTF8); optional BINARY email (UTF8); optional BINARY gender (UTF8); optional BINARY ip_address (UTF8); optional BINARY cc (UTF8); optional BINARY country (UTF8); optional BINARY birthdate (UTF8); optional DOUBLE salary; optional BINARY title (UTF8); optional BINARY comments (UTF8); }", "column":[ { "index":"0", "type":"string" }, { "index":"1", "type":"long" }, { "index":"2", "type":"string" }, { "index":"3", "type":"string" }, { "index":"4", "type":"string" }, { "index":"5", "type":"string" }, { "index":"6", "type":"string" }, { "index":"7", "type":"string" }, { "index":"8", "type":"string" }, { "index":"9", "type":"string" }, { "index":"10", "type":"double" }, { "index":"11", "type":"string" }, { "index":"12", "type":"string" } ], "skipHeader":"false", "encoding":"UTF-8", "fieldDelimiter":",", "fieldDelimiterOrigin":",", "datasource":"wpw_demotest_oss", "envType":0, "object":[ "wpw_demo/userdata1.parquet" ] }, "name":"Reader", "category":"reader" }, { "stepType":"odps", "parameter":{ "partition":"dt=${bizdate}", "truncate":true, "datasource":"0_odps_wpw_demotest", "envType":0, "column":[ "id" ], "emptyAsNull":false, "table":"wpw_0827" }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"" }, "locale":"zh_CN", "speed":{ "throttle":false, "concurrent":2 } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Parameter skrip Reader
Parameter | Deskripsi | Wajib | Nilai default |
datasource | Nama sumber data. Anda dapat menambahkan sumber data di editor kode. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. | Ya | Tidak ada |
Object | Menentukan satu atau beberapa objek untuk disinkronkan dari OSS. Anda dapat menentukan objek menggunakan jalur eksplisit, karakter wildcard, atau parameter dinamis. 1. Metode konfigurasi
Penting
2. Mekanisme baca konkuren dan kinerja Metode konfigurasi secara langsung memengaruhi kinerja konkuren ekstraksi data:
| Ya | Tidak ada |
parquetSchema | Parameter ini dikonfigurasi saat Anda membaca file Parquet dari OSS. Parameter ini hanya berlaku ketika fileFormat diatur ke parquet. Parameter ini menentukan tipe data yang disimpan dalam file Parquet. Anda harus memastikan bahwa konfigurasi keseluruhan sesuai dengan sintaks JSON setelah menentukan parameter ini. Daftar berikut menjelaskan format parameter parquetSchema:
Contoh berikut menunjukkan cara mengonfigurasi parameter ini. | Tidak | Tidak ada |
column | Daftar field yang akan dibaca. `type` menentukan tipe data dari data sumber. `index` menentukan kolom dari mana data dibaca. Nilai `index` dimulai dari 0. `value` menentukan bahwa kolom saat ini adalah konstanta. Data tidak dibaca dari file sumber tetapi dihasilkan secara otomatis berdasarkan nilai parameter ini. Secara default, Anda dapat membaca semua data sebagai tipe STRING. Konfigurasinya sebagai berikut. Anda dapat menentukan informasi field kolom. Konfigurasinya sebagai berikut. Catatan Saat menentukan informasi kolom, Anda harus menentukan parameter `type`. Anda harus menentukan salah satu parameter `index` atau `value`. | Ya | Semua data dibaca sebagai tipe STRING. |
fileFormat | Format file sumber di OSS. Nilai yang valid: csv dan text. Kedua format mendukung pemisah kustom. | Ya | csv |
fieldDelimiter | Pemisah yang memisahkan kolom dalam file sumber. Catatan Saat OSS Reader membaca data, Anda harus menentukan pemisah kolom. Jika tidak menentukannya, koma (,) digunakan secara default. Koma (,) juga merupakan nilai default di UI. Jika pemisah bukan karakter yang terlihat, masukkan representasi Unicode-nya. Misalnya, \u001b atau \u007c. | Ya | , |
lineDelimiter | Pemisah yang memisahkan baris dalam file sumber. Catatan Parameter ini hanya berlaku ketika fileFormat diatur ke text. | Tidak | Tidak ada |
compress | Format kompresi file teks. Nilai default kosong, yang menunjukkan bahwa file tidak dikompresi. Nilai yang valid: gzip, bzip2, dan zip. | Tidak | Tidak dikompresi |
encoding | Format encoding file sumber. | Tidak | utf-8 |
nullFormat | Dalam file teks, Anda tidak dapat menggunakan string standar untuk mendefinisikan pointer null. Data Integration menyediakan parameter nullFormat untuk mendefinisikan string mana yang dapat diinterpretasikan sebagai null. Contoh:
| Tidak | Tidak ada |
skipHeader | Menentukan apakah akan melewati header dalam file mirip CSV. Nilai default adalah false. Parameter skipHeader tidak didukung untuk file terkompresi. | Tidak | false |
csvReaderConfig | Parameter untuk membaca file CSV. Parameter ini bertipe Map. CsvReader digunakan untuk membaca file CSV. Anda dapat mengonfigurasi beberapa parameter. Jika tidak mengonfigurasi parameter ini, nilai default digunakan. | Tidak | Tidak ada |
Demo skrip Writer: Contoh umum
{
"type":"job",
"version":"2.0",
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"oss",// Nama plugin.
"parameter":{
"nullFormat":"",// Data Integration menyediakan parameter nullFormat untuk mendefinisikan string mana yang dapat diinterpretasikan sebagai null.
"dateFormat":"",// Format tanggal.
"datasource":"",// Sumber data.
"writeMode":"",// Mode penulisan.
"writeSingleObject":"false", // Menentukan apakah akan menulis data yang disinkronkan ke satu file OSS.
"encoding":"",// Format encoding.
"fieldDelimiter":",",// Pemisah kolom.
"fileFormat":"",// Jenis teks.
"object":""// Awalan objek.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan data kotor yang diizinkan.
},
"speed":{
"throttle":true,// Jika Anda mengatur throttle ke false, parameter mbps tidak berlaku dan tidak ada batasan laju. Jika Anda mengatur throttle ke true, batasan laju diterapkan.
"concurrent":1, // Jumlah pekerjaan konkuren.
"mbps":"12"// Batasan laju. 1 Mbps setara dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Demo skrip Writer: Konfigurasi skrip untuk menulis file ORC atau Parquet ke OSS
DataWorks menggunakan kembali HDFS Writer untuk menulis file ORC atau Parquet ke OSS. Selain parameter OSS Writer yang sudah ada, parameter tambahan seperti Path dan FileFormat juga didukung. Untuk informasi lebih lanjut tentang parameter tersebut, lihat HDFS Writer.
Contoh berikut menunjukkan cara menulis file ORC atau Parquet ke OSS:
Kode berikut hanya contoh. Anda harus memodifikasi parameter berdasarkan nama dan tipe kolom Anda. Jangan menyalin kode secara langsung.
Menulis data ke OSS dalam format ORC
Anda hanya dapat menulis file ORC di editor kode. Atur fileFormat ke
orc, atur path ke jalur file tujuan, dan konfigurasi column dalam format{"name":"nama kolom Anda","type": "tipe kolom Anda"}.Tipe data ORC berikut didukung untuk operasi tulis:
Jenis bidang
Tulis offline ke OSS (format ORC)
TINYINT
Didukung
SMALLINT
Didukung
INT
Didukung
BIGINT
Didukung
FLOAT
Didukung
DOUBLE
Dukungan
TIMESTAMP
Didukung
DATE
Didukung
VARCHAR
Didukung
STRING
Didukung
CHAR
Didukung
BOOLEAN
Didukung
DECIMAL
Didukung
BINARY
Didukung
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "orc", "path": "/tests/case61", "fileName": "orc", "writeMode": "append", "column": [ { "name": "col1", "type": "BIGINT" }, { "name": "col2", "type": "DOUBLE" }, { "name": "col3", "type": "STRING" } ], "writeMode": "append", "fieldDelimiter": "\t", "compress": "NONE", "encoding": "UTF-8" } }Menulis data ke OSS dalam format Parquet
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "parquet", "path": "/tests/case61", "fileName": "test", "writeMode": "append", "fieldDelimiter": "\t", "compress": "SNAPPY", "encoding": "UTF-8", "parquetSchema": "message test { required int64 int64_col;\n required binary str_col (UTF8);\nrequired group params (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired binary value (UTF8);\n}\n}\nrequired group params_arr (LIST) {\nrepeated group list {\nrequired binary element (UTF8);\n}\n}\nrequired group params_struct {\nrequired int64 id;\n required binary name (UTF8);\n }\nrequired group params_arr_complex (LIST) {\nrepeated group list {\nrequired group element {\n required int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_complex (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired group value {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_struct_complex {\nrequired int64 id;\n required group detail {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}", "dataxParquetMode": "fields" } }
Parameter skrip Writer
Parameter | Deskripsi | Wajib | Nilai default |
datasource | Nama sumber data. Anda dapat menambahkan sumber data di editor kode. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan. | Ya | Tidak ada |
object | Nama file yang akan ditulis oleh OSS Writer. OSS menggunakan nama file untuk mensimulasikan folder. OSS memiliki batasan berikut pada nama objek:
Jika Anda tidak ingin sufiks UUID acak, atur | Ya | Tidak ada |
ossBlockSize | Ukuran bagian OSS. Ukuran default adalah 16 MB. Parameter ini hanya didukung saat file ditulis dalam format parquet atau ORC. Anda dapat menambahkan parameter ini pada level yang sama dengan parameter object. Karena unggah multi-bagian OSS mendukung maksimal 10.000 bagian, ukuran default satu file dibatasi hingga 160 GB. Jika jumlah bagian melebihi batas, Anda dapat meningkatkan ukuran bagian untuk mendukung unggahan file yang lebih besar. | Tidak | 16 |
writeMode | Metode pemrosesan data yang digunakan OSS Writer sebelum menulis data:
| Ya | Tidak ada |
writeSingleObject | Menentukan apakah akan menulis data ke satu file di OSS:
Catatan
| Tidak | false |
fileFormat | Format file yang akan ditulis. Format berikut didukung:
| Tidak | text |
compress | Format kompresi file data yang akan ditulis ke OSS. Parameter ini harus dikonfigurasi di editor kode. Catatan Kompresi tidak didukung untuk tipe file csv dan text. File Parquet dan ORC mendukung format kompresi seperti gzip dan snappy. | Tidak | Tidak ada |
fieldDelimiter | Pemisah yang memisahkan kolom dalam file tujuan. | Tidak | , |
encoding | Format encoding file tujuan. | Tidak | utf-8 |
parquetSchema | Parameter ini wajib saat Anda menulis data ke OSS dalam format Parquet. Parameter ini digunakan untuk menggambarkan struktur file tujuan. Parameter ini hanya berlaku ketika fileFormat diatur ke parquet. Formatnya sebagai berikut. Daftar berikut menjelaskan item konfigurasi:
Catatan Setiap pengaturan baris harus diakhiri dengan titik koma, termasuk baris terakhir. Pertimbangkan contoh berikut. | Tidak | Tidak ada |
nullFormat | Anda tidak dapat menggunakan string standar untuk mendefinisikan null (pointer null) dalam file teks. Sistem sinkronisasi data menyediakan parameter nullFormat untuk mendefinisikan string yang merepresentasikan nilai null. Misalnya, jika Anda mengonfigurasi | Tidak | Tidak ada |
header | Header file yang ditulis ke OSS. Contoh: | Tidak | Tidak ada |
maxFileSize (Konfigurasi lanjutan, tidak didukung di UI tanpa kode) | Ukuran maksimum satu file objek yang ditulis ke OSS. Nilai default adalah 10.000 × 10 MB. Ini mirip dengan mengontrol ukuran file log saat Anda mencetak log log4j. Saat OSS melakukan unggah multi-bagian, ukuran setiap bagian adalah 10 MB. Ini juga merupakan granularitas minimum untuk rotasi file log. Nilai maxFileSize kurang dari 10 MB dianggap sebagai 10 MB. Setiap OSS InitiateMultipartUploadRequest mendukung maksimal 10.000 bagian. Saat rotasi terjadi, nama objek dibentuk dengan menambahkan UUID dan sufiks seperti _1, _2, atau _3 ke awalan objek asli. Catatan
| Tidak | 100.000 |
suffix (Konfigurasi lanjutan, tidak didukung di UI tanpa kode) | Sufiks nama file yang dihasilkan saat data ditulis. Misalnya, jika Anda mengatur suffix ke .csv, nama file akhir adalah fileName****.csv. | Tidak | Tidak ada |
Lampiran: Kebijakan konversi untuk tipe data Parquet
Jika Anda tidak mengonfigurasi parameter parquetSchema, DataWorks mengonversi tipe data field sumber berdasarkan kebijakan yang telah ditentukan. Tabel berikut menjelaskan kebijakan konversi ini.
Tipe data yang dikonversi | Tipe Parquet | Tipe logis Parquet |
CHAR / VARCHAR / STRING | BINARY | UTF8 |
BOOLEAN | BOOLEAN | Tidak berlaku |
BINARY / VARBINARY | BINARY | Tidak berlaku |
DECIMAL | FIXED_LEN_BYTE_ARRAY | DECIMAL |
TINYINT | INT32 | INT_8 |
SMALLINT | INT32 | INT_16 |
INT/INTEGER | INT32 | Tidak berlaku |
BIGINT | INT64 | Tidak berlaku |
FLOAT | FLOAT | Tidak berlaku |
DOUBLE | DOUBLE | Tidak berlaku |
DATE | INT32 | DATE |
TIME | INT32 | TIME_MILLIS |
TIMESTAMP/DATETIME | INT96 | Tidak berlaku |