Sumber data OSS menyediakan saluran dua arah untuk membaca dan menulis data ke OSS. Topik ini menjelaskan kemampuan sinkronisasi data dari sumber data OSS di DataWorks.
Tipe field dan batasan yang didukung
Baca offline
OSS Reader membaca data dari OSS dan mengonversinya ke protokol integrasi data. OSS adalah layanan penyimpanan untuk data tidak terstruktur. Untuk integrasi data, OSS Reader mendukung fitur-fitur berikut.
Dukungan | Tidak didukung |
|
|
Jika Anda menyiapkan data di OSS sebagai 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 akan terpisah secara salah. Jika file memiliki beberapa pemisah, kami menyarankan agar Anda menggunakan tipe file teks.
OSS adalah sumber data tidak terstruktur yang menyimpan data bertipe file. Sebelum melakukan sinkronisasi data, pastikan struktur field sesuai ekspektasi Anda. Demikian pula, jika struktur data dalam sumber data tidak terstruktur berubah, Anda harus mengonfirmasi ulang struktur field dalam konfigurasi task. Jika tidak, data dapat rusak selama sinkronisasi.
Tulis offline
OSS Writer mengonversi data dari protokol sinkronisasi data menjadi file teks di OSS. OSS adalah layanan penyimpanan untuk data tidak terstruktur. OSS Writer mendukung fitur-fitur berikut.
Dukungan | Tidak didukung |
|
|
Klasifikasi tipe | Tipe konfigurasi kolom integrasi data |
Tipe integer | LONG |
Tipe string | STRING |
Tipe floating-point | DOUBLE |
Tipe boolean | BOOLEAN |
Tipe tanggal dan waktu | DATE |
Tulis real-time
Mendukung penulisan real-time.
Mendukung penulisan real-time dari satu tabel ke data lake, seperti Hudi (0.12.x), Paimon, dan Iceberg.
Buat sumber data
Sebelum mengembangkan task sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen Sumber Data. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Jika Anda membuat sumber data OSS lintas akun, Anda harus memberikan otorisasi ke akun yang bersangkutan. Untuk informasi lebih lanjut, lihat Berikan akses lintas akun ke OSS menggunakan kebijakan bucket.
Jika Anda menggunakan role RAM untuk mengotorisasi sumber data OSS, lihat Konfigurasikan sumber data menggunakan mode otorisasi role RAM.
Jika Anda membuat sumber data OSS lintas wilayah, gunakan Titik akhir publik. Untuk informasi lebih lanjut, lihat Ikhtisar titik akhir dan konektivitas jaringan.
Kembangkan task sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi task sinkronisasi, lihat panduan konfigurasi berikut.
Panduan konfigurasi task sinkronisasi offline tabel tunggal
Untuk informasi lebih lanjut tentang proses konfigurasi, lihat Konfigurasi Antarmuka tanpa kode dan Konfigurasi editor kode.
Untuk semua parameter dan demo skrip editor kode, lihat Lampiran: Demo skrip dan deskripsi parameter.
Panduan konfigurasi task sinkronisasi real-time tabel tunggal
Untuk informasi lebih lanjut tentang proses konfigurasi, lihat Konfigurasikan task sinkronisasi real-time di Data Integration dan Konfigurasikan task sinkronisasi real-time di DataStudio.
Panduan konfigurasi sinkronisasi seluruh database
Untuk informasi lebih lanjut tentang proses konfigurasi, lihat Task sinkronisasi offline seluruh database dan Task sinkronisasi real-time seluruh database.
FAQ
Apakah ada batasan jumlah file OSS yang dapat dibaca?
Bagaimana cara menangani data kotor saat membaca file CSV dengan beberapa pemisah?
Lampiran: Demo skrip dan deskripsi parameter
Konfigurasikan task sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi task sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasikan task di editor kode. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi task 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 merepresentasikan 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":"",// Melewati baris header jika file mirip CSV memiliki header.
"encoding":"",// Format encoding.
"fieldDelimiter":",",// Pemisah kolom.
"fileFormat": "",// Format file teks.
"object":[]// Awalan objek.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":""// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku, dan laju tidak dibatasi. Jika throttle diatur ke true, laju dibatasi.
"concurrent":1, // Jumlah job konkuren.
"mbps":"12"// Batas laju. 1 mbps setara dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Demo skrip Reader: Baca file ORC atau Parquet dari OSS
Anda dapat membaca file dalam format ORC atau Parquet dari OSS dengan menggunakan kembali HDFS Reader. Selain parameter OSS Reader yang sudah ada, parameter konfigurasi tambahan seperti Path (untuk ORC) dan FileFormat (untuk ORC dan Parquet) juga digunakan.
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. Nilai parameter ini harus sama dengan nama sumber data yang Anda tambahkan di editor kode. | Ya | Tidak ada |
Object | Menentukan satu atau beberapa objek untuk disinkronkan dari OSS. Anda dapat menentukan objek menggunakan path lengkap, path dengan karakter wildcard, atau path dengan parameter dinamis. 1. Metode konfigurasi
Penting
2. Mekanisme baca konkuren dan performa Cara Anda mengonfigurasi path menentukan konkurensi dan performa ekstraksi data:
| Ya | Tidak ada |
parquetSchema | Parameter ini hanya diperlukan saat Anda membaca file Parquet dari OSS. Parameter ini hanya berlaku ketika fileFormat diatur ke parquet. Parameter ini menjelaskan tipe data dalam file Parquet. Pastikan konfigurasi dalam format JSON yang valid. Format `parquetSchema` adalah sebagai berikut:
Berikut adalah contoh konfigurasi. | Tidak | Tidak ada |
column | Daftar field yang akan dibaca. `type` menentukan tipe data dari data sumber. `index` menentukan nomor kolom (dimulai dari 0) dalam file teks. `value` menentukan bahwa tipe saat ini adalah konstanta. Data untuk kolom ini tidak dibaca dari file sumber tetapi dihasilkan secara otomatis berdasarkan `value`. Secara default, Anda dapat membaca semua data sebagai tipe String. Konfigurasinya sebagai berikut. Anda juga dapat menentukan informasi field kolom. Konfigurasinya sebagai berikut. Catatan Untuk informasi kolom yang Anda tentukan, `type` wajib diisi. Anda harus menentukan salah satu antara `index` atau `value`. | Ya | Semua data dibaca sebagai tipe STRING. |
fileFormat | Format file dari objek sumber di OSS. Nilai yang valid adalah `csv` dan `text`. Kedua format mendukung pemisah kustom. | Ya | csv |
fieldDelimiter | Pemisah kolom yang digunakan untuk membaca file. Catatan Saat OSS Reader membaca data, Anda harus menentukan pemisah kolom. Jika tidak ditentukan, nilai default-nya adalah koma (,). Koma juga merupakan nilai default di halaman konfigurasi. Jika pemisah bukan karakter yang terlihat, masukkan encoding Unicode-nya. Misalnya, \u001b atau \u007c. | Ya | , |
lineDelimiter | Pemisah baris. Catatan Parameter ini hanya berlaku saat `fileFormat` diatur ke `text`. | Tidak | Tidak ada |
compress | Format kompresi file teks. Nilai default kosong, yang berarti tidak ada kompresi. Format yang didukung adalah gzip, bzip2, dan zip. | Tidak | Tidak ada kompresi |
encoding | Format encoding dari file sumber. | Tidak | utf-8 |
nullFormat | File teks tidak dapat menggunakan string standar untuk mendefinisikan pointer null. Gunakan `nullFormat` untuk mendefinisikan string mana yang merepresentasikan null. Misalnya:
| Tidak | Tidak ada |
skipHeader | Melewati baris header dalam file mirip CSV. Nilai default adalah false. Parameter skipHeader tidak didukung untuk file terkompresi. | Tidak | false |
csvReaderConfig | Parameter untuk membaca file CSV. Ini adalah map. CsvReader digunakan untuk membaca file CSV. Jika Anda tidak mengonfigurasi parameter ini, nilai default akan 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":"",// Mendefinisikan string yang merepresentasikan null.
"dateFormat":"",// Format tanggal.
"datasource":"",// Sumber data.
"writeMode":"",// Mode penulisan.
"writeSingleObject":"false", // Menentukan apakah data yang disinkronkan ditulis ke satu file OSS.
"encoding":"",// Format encoding.
"fieldDelimiter":",",// Pemisah kolom.
"fileFormat":"",// Format file teks.
"object":""// Awalan objek.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Jumlah catatan error.
},
"speed":{
"throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku, dan laju tidak dibatasi. Jika throttle diatur ke true, laju dibatasi.
"concurrent":1, // Jumlah job konkuren.
"mbps":"12"// Batas laju. 1 mbps setara dengan 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Demo skrip Writer: Tulis file ORC atau Parquet ke OSS
Anda dapat menulis file ORC atau Parquet ke OSS dengan menggunakan kembali HDFS Writer. Selain parameter OSS Writer yang sudah ada, Anda dapat menggunakan parameter tambahan seperti Path dan FileFormat. Untuk informasi lebih lanjut tentang parameter ini, lihat HDFS Writer.
Contoh berikut menunjukkan cara menulis file ORC atau Parquet ke OSS:
Kode berikut hanya sebagai referensi. Sesuaikan parameter sesuai dengan nama kolom dan tipe data Anda. Jangan menyalin kode secara langsung.
Tulis file ORC ke OSS
Untuk menulis file ORC, Anda harus menggunakan editor kode. Atur fileFormat ke
orc, atur path ke path file yang akan ditulis, dan konfigurasikan column dalam format{"name": "nama kolom Anda", "type": "tipe kolom Anda"}.Tipe ORC berikut didukung untuk penulisan:
Tipe bidang
Tulis offline ke OSS (format ORC)
TINYINT
Dukungan
SMALLINT
Dukungan
INT
Dukungan
BIGINT
Dukungan
FLOAT
Didukung
DOUBLE
Didukung
TIMESTAMP
Didukung
DATE
Didukung
VARCHAR
Dukungan
STRING
Dukungan
CHAR
Dukungan
BOOLEAN
Dukungan
DECIMAL
Dukungan
BINARY
Dukungan
{ "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" } }Tulis file Parquet ke OSS
{ "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. Nilai parameter ini harus sama dengan nama sumber data yang Anda tambahkan di editor kode. | Ya | Tidak ada |
object | Nama file yang akan ditulis ke OSS. OSS menggunakan nama file untuk mensimulasikan struktur direktori. OSS memiliki batasan berikut pada nama objek:
Jika Anda tidak ingin UUID acak ditambahkan, atur | Ya | Tidak ada |
ossBlockSize | Ukuran setiap blok data dalam MB. Nilai default adalah 16. Parameter ini hanya didukung saat `fileFormat` adalah parquet atau ORC. Anda dapat mengonfigurasi parameter ini pada level yang sama dengan parameter object. Karena unggah multi-bagian di OSS mendukung maksimal 10.000 blok, ukuran file tunggal default dibatasi hingga 160 GB. Jika jumlah blok melebihi batas, Anda dapat menambah ukuran blok untuk mendukung unggahan file yang lebih besar. | Tidak | 16 |
writeMode | Menentukan cara menangani data yang sudah ada sebelum menulis:
| Ya | Tidak ada |
writeSingleObject | Menentukan apakah data ditulis ke satu file:
Catatan
| Tidak | false |
fileFormat | Format file objek. Format berikut didukung:
| Tidak | text |
compress | Format kompresi file objek yang ditulis ke OSS. Parameter ini harus dikonfigurasi di editor kode. Penting Tipe file CSV dan TEXT tidak mendukung kompresi. File Parquet dan ORC hanya mendukung kompresi SNAPPY. | Tidak | Tidak ada |
fieldDelimiter | Pemisah kolom. | Tidak | , |
encoding | Konfigurasikan encoding file. | Tidak | utf-8 |
parquetSchema | Parameter ini diperlukan saat Anda menulis data ke file Parquet di OSS. Parameter ini menjelaskan struktur file objek. Parameter ini hanya berlaku saat fileFormat diatur ke parquet. Formatnya sebagai berikut. Item konfigurasi adalah sebagai berikut:
Catatan Setiap pengaturan baris harus diakhiri dengan titik koma, termasuk baris terakhir. Berikut adalah contohnya. | Tidak | Tidak ada |
nullFormat | File teks tidak dapat menggunakan string standar untuk mendefinisikan pointer null. Gunakan nullFormat untuk mendefinisikan string yang merepresentasikan null. Misalnya, jika Anda mengatur | Tidak | Tidak ada |
header | Header file objek. Contoh: | Tidak | Tidak ada |
maxFileSize (Konfigurasi lanjutan. Parameter ini tidak didukung di Antarmuka tanpa kode.) | Ukuran maksimum satu file objek dalam MB. Nilai default adalah 10.000 × 10 MB. Ini mirip dengan mengontrol ukuran file log di log4j. Saat menggunakan unggah multi-bagian di OSS, setiap blok berukuran 10 MB (yang juga merupakan granularitas minimum untuk rotasi file log, artinya `maxFileSize` kurang dari 10 MB dianggap sebagai 10 MB). Setiap OSS InitiateMultipartUploadRequest mendukung maksimal 10.000 blok. Saat rotasi terjadi, nama objek dibentuk dengan menambahkan akhiran seperti _1, _2, _3 ke awalan objek asli dengan UUID acak. Catatan
| Tidak | 100.000 |
suffix (Konfigurasi lanjutan. Parameter ini tidak didukung di Antarmuka tanpa kode.) | Akhiran nama file yang dihasilkan. Misalnya, jika Anda mengatur suffix ke .csv, nama file akhir akan menjadi fileName****.csv. | Tidak | Tidak ada |
Lampiran: Kebijakan konversi tipe data Parquet
Jika Anda tidak mengonfigurasi parameter `parquetSchema`, DataWorks mengonversi tipe data field sumber berdasarkan kebijakan berikut.
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 |