Sumber data OSS menyediakan akses baca dan tulis ke OSS. Topik ini menjelaskan cara DataWorks mendukung sinkronisasi data OSS.
Tipe field dan batasan yang didukung
Baca data batch
OSS Reader membaca data dari OSS dan mengonversinya ke format yang dapat diproses oleh Data Integration. Karena OSS merupakan layanan penyimpanan data tidak terstruktur, reader mendukung fitur-fitur berikut.
Didukung | Tidak didukung |
|
|
Saat menyiapkan data di OSS, file CSV harus sesuai dengan format CSV standar. Misalnya, Anda harus melakukan escape tanda kutip ganda (") dalam kolom dengan menggantinya menjadi dua tanda kutip ganda (""); jika tidak, kesalahan parsing dapat terjadi. Jika file berisi beberapa delimiter, kami merekomendasikan penggunaan tipe file TXT.
OSS adalah sumber data tidak terstruktur yang menyimpan data sebagai file. Sebelum menjalankan tugas sinkronisasi, pastikan struktur field dikonfigurasi dengan benar. Jika struktur data sumber berubah, Anda harus memperbarui konfigurasi tugas untuk mencegah data menjadi kacau.
Tulis data batch
OSS Writer mengonversi data yang sesuai dengan Data Integration dan menuliskannya ke OSS sebagai file teks. Karena OSS merupakan layanan penyimpanan data tidak terstruktur, writer mendukung fitur-fitur berikut.
Didukung | Tidak didukung |
|
|
Kategori | Tipe kolom |
Integer | LONG |
String | STRING |
Floating-point | DOUBLE |
Boolean | BOOLEAN |
Date and time | DATE |
Tulis data real-time
Mendukung penulisan data real-time.
Anda dapat melakukan penulisan real-time dari satu tabel ke format data lake berikut: Hudi (0.12.x), Paimon, dan Iceberg.
Tambahkan 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 deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Saat menambahkan sumber data OSS lintas akun, Anda harus memberikan izin yang diperlukan. Untuk informasi lebih lanjut, lihat Gunakan kebijakan bucket untuk memberikan akses cross-account ke OSS.
Jika Anda menggunakan otorisasi berbasis peran RAM untuk mengonfigurasi sumber data OSS, lihat Konfigurasi sumber data menggunakan otorisasi peran RAM.
Saat menambahkan sumber data OSS lintas wilayah, kami merekomendasikan penggunaan Titik akhir publik. Untuk informasi lebih lanjut, lihat Ikhtisar titik akhir dan konektivitas jaringan.
Konfigurasi tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Sinkronisasi batch tabel tunggal
Lihat Konfigurasi di Antarmuka tanpa kode dan Konfigurasi dalam mode skrip.
Untuk parameter mode skrip dan contoh kode, lihat Lampiran: Contoh kode dan deskripsi parameter.
Sinkronisasi real-time tabel tunggal
Lihat Konfigurasi tugas sinkronisasi real-time tabel tunggal.
Sinkronisasi database penuh
Lihat Konfigurasi tugas sinkronisasi batch database penuh dan Konfigurasi tugas sinkronisasi real-time database penuh.
FAQ
Apakah ada batas file untuk membaca dari OSS?
Bagaimana cara menangani data kotor saat membaca file CSV multi-delimiter?
Lampiran: Contoh skrip dan parameter
Konfigurasi tugas sinkronisasi batch menggunakan editor kode
Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Gunakan Editor Kode. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Contoh skrip reader umum
{
"type":"job",
"version":"2.0",// Nomor versi.
"steps":[
{
"stepType":"oss",// Nama plugin.
"parameter":{
"nullFormat":"",// String yang merepresentasikan nilai null.
"compress":"",// Jenis kompresi.
"datasource":"",// Sumber data.
"column":[// Definisi kolom.
{
"index":0,// Indeks kolom. Dimulai dari 0.
"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. Diperlukan ketika 'type' adalah 'date'.
"index":4,
"type":"date"
}
],
"skipHeader":"",// Apakah akan melewati header di file mirip CSV.
"encoding":"",// Pengkodean karakter.
"fieldDelimiter":",",// Delimiter field.
"fileFormat": "",// Format file.
"object":[]// Awalan objek untuk file yang akan dibaca.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":""// Jumlah maksimum catatan error yang diizinkan.
},
"speed":{
"throttle":true,// Jika true, mengaktifkan Pembatasan kecepatan. Jika false, parameter 'mbps' diabaikan.
"concurrent":1, // Konkurensi job.
"mbps":"12"// Batas kecepatan Pembatasan kecepatan dalam MB/s (1 mbps = 1 MB/s).
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Baca file ORC atau Parquet dari OSS
Anda dapat membaca file ORC atau Parquet dari OSS dengan menggunakan kembali HDFS reader. Untuk melakukannya, tentukan parameter standar OSS reader bersama dengan parameter path (untuk ORC) dan fileFormat (untuk ORC dan Parquet).
Contoh ini menunjukkan cara membaca data dalam format 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 ini menunjukkan cara membaca data dalam format 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 | Bawaan |
datasource | Menentukan nama sumber data. Dalam mode skrip, nilai ini harus sesuai dengan nama sumber data yang telah dikonfigurasi. | Ya | Tidak ada |
object | Menentukan satu atau beberapa objek untuk disinkronkan dari OSS. Anda dapat menentukan objek menggunakan path eksplisit, wildcard, atau parameter dinamis. 1. Metode konfigurasi
Penting
2. Konkurensi dan performa Metode konfigurasi secara langsung menentukan konkurensi ekstraksi data:
| Ya | Tidak ada |
parquetSchema | Gunakan parameter ini untuk mendefinisikan skema file dalam format file Parquet. Parameter ini hanya berlaku ketika fileFormat diatur ke parquet. Setelah Anda menentukan parquetSchema, pastikan konfigurasi keseluruhan merupakan JSON yang valid. Format untuk parquetSchema adalah sebagai berikut:
Berikut adalah contoh konfigurasi: | Tidak | Tidak ada |
column | Menentukan daftar kolom yang akan dibaca. 'type' menentukan tipe data di sumber. 'index' menentukan indeks kolom berbasis nol dalam file teks. 'value' menentukan nilai konstan untuk kolom, yang menginstruksikan sistem untuk menghasilkan nilai tersebut alih-alih membacanya dari file sumber. Secara default, Anda dapat membaca semua kolom sebagai tipe data STRING, seperti pada contoh berikut. Anda juga dapat menentukan detail untuk setiap kolom, seperti pada contoh berikut. Catatan Untuk setiap kolom yang Anda tentukan, 'type' wajib diisi, dan Anda harus menentukan salah satu dari 'index' atau 'value'. | Ya | Semua kolom dibaca sebagai tipe data STRING. |
fileFormat | Format file objek sumber di OSS. Nilai yang valid adalah 'csv' dan 'text'. Kedua format mendukung delimiter kustom. | Ya | csv |
fieldDelimiter | Delimiter field. Catatan Delimiter field wajib diisi. Jika tidak ditentukan, parameter ini menggunakan koma (,) sebagai nilai bawaan, yang juga merupakan nilai bawaan UI. Tentukan karakter tak terlihat dengan representasi Unicode-nya (misalnya, \u001b). Anda juga dapat menggunakan format ini untuk karakter terlihat (misalnya, \u007c untuk simbol pipe). | Ya | , |
lineDelimiter | Delimiter baris. Catatan Parameter ini hanya berlaku ketika 'fileFormat' diatur ke 'text'. | Tidak | Tidak ada |
compress | Jenis kompresi file sumber. Jika parameter ini tidak diatur, file diasumsikan tidak terkompresi. Jenis yang didukung: gzip, bzip2, dan zip. | Tidak | Tidak ada kompresi |
encoding | Pengkodean karakter file sumber. | Tidak | utf-8 |
nullFormat | Menentukan string dalam data sumber yang merepresentasikan nilai null. Hal ini diperlukan karena file teks tidak memiliki representasi standar untuk nilai null. Contohnya:
| Tidak | Tidak ada |
skipHeader | File mirip CSV mungkin memiliki baris header yang berfungsi sebagai judul, yang perlu dilewati. Secara default, baris ini tidak dilewati. Parameter skipHeader tidak didukung dalam mode file terkompresi. | Tidak | false |
csvReaderConfig | Peta pengaturan tambahan untuk CsvReader yang digunakan untuk mengurai file CSV. Jika parameter ini dihilangkan, CsvReader menggunakan pengaturan bawaannya. | Tidak | Tidak ada |
Contoh skrip writer
{
"type":"job",
"version":"2.0",
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"oss",// Nama plugin.
"parameter":{
"nullFormat":"",// Mendefinisikan string mana yang diinterpretasikan sebagai nilai null.
"dateFormat":"",// Format tanggal.
"datasource":"",// Sumber data.
"writeMode":"",// Mode penulisan.
"writeSingleObject":"false", // Jika true, menulis semua data ke satu file OSS.
"encoding":"",// Pengkodean file.
"fieldDelimiter":",",// Delimiter field.
"fileFormat":"",// Format file.
"object":""// Awalan objek.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// Batas error.
},
"speed":{
"throttle":true,// Mengaktifkan Pembatasan kecepatan. Jika false, parameter 'mbps' diabaikan.
"concurrent":1, // Konkurensi job.
"mbps":"12"// Batas Pembatasan kecepatan dalam MB/s (1 mbps = 1 MB/s).
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Contoh skrip: Tulis file ORC atau Parquet ke OSS
Anda dapat menulis file ORC atau Parquet ke OSS menggunakan HDFS Writer. Selain parameter OSS Writer yang ada, metode ini menambahkan parameter konfigurasi tambahan, seperti path dan fileFormat. Untuk deskripsi parameter ini, lihat HDFS Writer.
Contoh berikut menunjukkan cara menulis file ORC atau Parquet ke OSS:
Kode berikut hanya untuk tujuan demonstrasi. Anda harus memodifikasi parameter agar sesuai dengan nama kolom dan tipe kolom spesifik Anda. Jangan salin kode ini untuk digunakan di lingkungan produksi.
Tulis file ORC ke OSS
Saat ini Anda hanya dapat menulis file ORC di editor kode. Anda harus beralih ke editor kode untuk mengonfigurasi tugas. Atur parameter fileFormat ke
orc, tentukan path file, dan definisikan setiap column menggunakan format{"name":"nama kolom Anda","type": "tipe kolom Anda"}.Tipe kolom ORC berikut didukung untuk penulisan offline:
Tipe
Status
TINYINT
Didukung
SMALLINT
Didukung
INT
Didukung
BIGINT
Didukung
FLOAT
Didukung
DOUBLE
Didukung
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" } ], "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 | Bawaan |
datasource | Nama sumber data. Di editor kode, nilai ini harus sesuai dengan nama sumber data yang telah dikonfigurasi. | Ya | Tidak ada |
object | Nama objek output di OSS. OSS menggunakan nama objek untuk mensimulasikan struktur direktori. Nama objek memiliki konvensi berikut:
Jika Anda tidak ingin akhiran UUID acak, konfigurasikan | Ya | Tidak ada |
ossBlockSize | Ukuran bagian OSS. Nilai bawaan adalah 16 MB. Saat format output file adalah parquet atau ORC, Anda dapat mengonfigurasi parameter ini pada level yang sama dengan parameter object. Karena unggah multi-bagian OSS dibatasi hingga 10.000 bagian, ukuran bagian bawaan membatasi ukuran file maksimum hingga 160 GB. Untuk mengunggah file yang lebih besar, Anda harus menambah ukuran bagian. | Tidak | 16 |
writeMode | Menentukan cara OSS Writer menangani data yang sudah ada sebelum menulis:
| Ya | Tidak ada |
writeSingleObject | Menentukan apakah akan menulis semua data ke satu objek.
Catatan
| Tidak | false |
fileFormat | Format file objek output. Format berikut didukung:
| Tidak | text |
compress | Menentukan format kompresi untuk file data yang ditulis ke OSS. Parameter ini harus dikonfigurasi di editor kode. Penting Parameter ini hanya berlaku untuk format file Parquet dan ORC, yang hanya mendukung kompresi SNAPPY. Format csv dan text tidak mendukung kompresi. | Tidak | Tidak ada |
fieldDelimiter | Delimiter field untuk data output. | Tidak | , |
encoding | Menentukan pengkodean karakter untuk file output. | Tidak | utf-8 |
parquetSchema | Diperlukan ketika fileFormat diatur ke parquet. Parameter ini mendefinisikan skema file Parquet output. Gunakan format berikut: Item konfigurasi dijelaskan sebagai berikut:
Catatan Setiap definisi kolom harus diakhiri dengan titik koma, termasuk yang terakhir. Contoh: | Tidak | Tidak ada |
nullFormat | Dalam file teks, Anda tidak dapat menggunakan string standar untuk mendefinisikan nilai null. Sistem sinkronisasi data menyediakan parameter nullFormat untuk menentukan string yang merepresentasikan nilai null. Misalnya, jika Anda mengonfigurasi | Tidak | Tidak ada |
header | Menentukan header yang akan ditulis ke file output. Nilainya harus berupa array JSON string, seperti | Tidak | Tidak ada |
maxFileSize (Konfigurasi lanjutan, tidak didukung di Antarmuka tanpa kode) | Mengontrol ukuran maksimum satu objek output sebelum file diputar, mirip dengan rotasi file log. Untuk unggah multi-bagian, ukuran bagian adalah 10 MB, yang juga berfungsi sebagai granularitas rotasi minimum. Nilai Saat file diputar, nama objek baru dibuat dengan menambahkan nomor urut (seperti _1, _2, atau _3) ke nama objek dasar, yang sudah mencakup awalan dan UUID acak. Catatan
| Tidak | 100.000 |
suffix (Konfigurasi lanjutan, tidak didukung di Antarmuka tanpa kode) | Menentukan akhiran yang akan ditambahkan ke nama objek output. Misalnya, jika Anda mengatur suffix ke .csv, nama objek akhir mirip dengan object-prefix_random-uuid.csv. | Tidak | Tidak ada |
Lampiran: Konversi tipe data Parquet
Jika Anda tidak mengonfigurasi parquetSchema, DataWorks secara otomatis mengonversi tipe data sumber seperti yang ditunjukkan di bawah ini.
Tipe sumber | Tipe Parquet | Tipe logis Parquet |
CHAR / VARCHAR / STRING | BINARY | UTF8 |
BOOLEAN | BOOLEAN | N/A |
BINARY / VARBINARY | BINARY | N/A |
DECIMAL | FIXED_LEN_BYTE_ARRAY | DECIMAL |
TINYINT | INT32 | INT_8 |
SMALLINT | INT32 | INT_16 |
INT/INTEGER | INT32 | N/A |
BIGINT | INT64 | N/A |
FLOAT | FLOAT | N/A |
DOUBLE | DOUBLE | N/A |
DATE | INT32 | DATE |
TIME | INT32 | TIME_MILLIS |
TIMESTAMP/DATETIME | INT96 | N/A |