All Products
Search
Document Center

DataWorks:OSS

Last Updated:Sep 04, 2026

Sumber data OSS menyediakan akses baca dan tulis ke OSS. Topik ini menjelaskan cara DataWorks mendukung sinkronisasi data OSS.

Tipe bidang yang didukung dan batasan

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

  • Mendukung file TXT, yang harus memiliki skema tabel dua dimensi.

  • Mendukung file mirip CSV dengan pemisah kustom.

    Catatan

    Format teks (TXT dan CSV) mendukung kompresi gzip, bzip2, dan zip.

    Anda tidak dapat mengemas beberapa file ke dalam satu arsip terkompresi.

  • Mendukung file dalam format ORC, Parquet, JSON, dan JSONL.

  • Mendukung pembacaan berbagai tipe data (direpresentasikan sebagai STRING), pemangkasan kolom, dan konstanta kolom.

  • Mendukung pembacaan rekursif dan penyaringan nama objek.

  • Mendukung pembacaan konkuren dari beberapa objek.

  • Reader tidak dapat membaca satu objek (file) secara konkuren menggunakan beberapa thread.

  • Satu objek terkompresi tidak mendukung pembacaan multi-threaded konkuren.

Penting

  • Saat menyiapkan data di OSS, file CSV harus sesuai dengan format CSV standar. Misalnya, tanda kutip ganda (") dalam kolom harus di-escape dengan menggantinya menjadi dua tanda kutip ganda (""), karena jika tidak, file tersebut mungkin terpisah secara salah. Jika file berisi beberapa pemisah, disarankan untuk menggunakan tipe teks.

  • OSS adalah sumber data tidak terstruktur yang menyimpan data dalam bentuk file. Sebelum melakukan sinkronisasi data, pastikan struktur bidang data yang akan disinkronkan sesuai dengan ekspektasi Anda. Jika struktur data sumber berubah, Anda harus mengonfirmasi ulang struktur bidang dalam konfigurasi Tugas. Jika tidak, kesalahan sinkronisasi data dapat terjadi.

Tulis data batch

OSS Writer mengonversi data dari protokol Data Integration menjadi file teks di OSS. Karena OSS merupakan layanan penyimpanan data tidak terstruktur, writer mendukung fitur-fitur berikut.

Didukung

Tidak didukung

  • Hanya file teks yang dapat ditulis. Data BLOB seperti video dan gambar tidak didukung. File teks harus memiliki skema tabel dua dimensi.

  • Mendukung file mirip CSV dengan pemisah kustom.

  • Mendukung format ORC, Parquet, JSON, dan JSONL.

    Catatan

    Format kompresi SNAPPY didukung dalam mode skrip.

  • Mendukung penulisan multi-threaded, dengan setiap thread menulis ke sub-file yang berbeda.

  • Mendukung rolling file. Saat ukuran file melebihi batas tertentu, writer beralih ke file baru.

  • Satu file tidak mendukung penulisan konkuren.

  • OSS tidak menyediakan tipe data native. OSS Writer menulis semua data ke objek OSS sebagai tipe STRING.

  • Jika kelas penyimpanan bucket OSS adalah Cold Archive Storage, operasi tulis tidak didukung.

  • Satu objek (file) tidak boleh melebihi 100 GB.

Kategori

Tipe Kolom Data Integration

Integer

LONG

String

STRING

Floating-point

DOUBLE

Boolean

BOOLEAN

Tanggal dan waktu

DATE

Tulis real-time

  • Mendukung kemampuan penulisan real-time.

  • Penulisan real-time single-table ke data lake didukung: Hudi (0.12.x), Paimon, dan Iceberg.

Buat sumber data

Sebelum mengembangkan Tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Konfigurasi sumber data. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.

Catatan

Pengembangan tugas sinkronisasi data

Untuk informasi tentang titik masuk dan prosedur konfigurasi Tugas sinkronisasi, lihat panduan konfigurasi berikut.

Panduan konfigurasi tugas sinkronisasi batch single-table

Panduan konfigurasi tugas sinkronisasi real-time single-table

Untuk prosedurnya, lihat Konfigurasi tugas sinkronisasi real-time single-table.

Panduan konfigurasi sinkronisasi seluruh database

Untuk prosedurnya, lihat Kemampuan Tugas Sinkronisasi Batch Seluruh Database dan Kemampuan Tugas Sinkronisasi Real-time Seluruh Database.

FAQ

Apakah ada batas jumlah file saat membaca file OSS?

Bagaimana cara menangani data kotor saat membaca file CSV dengan pemisah multi-karakter?

Lampiran: Demo skrip dan deskripsi 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 sesuai dengan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasi mode skrip. Informasi berikut menjelaskan parameter yang harus Anda konfigurasi untuk sumber data saat mengonfigurasi Tugas sinkronisasi batch menggunakan editor kode.

Demo skrip Reader: Contoh umum

Contoh berikut menunjukkan skrip umum untuk OSS Reader.

{
    "type":"job",
    "version":"2.0",//Nomor versi.
    "steps":[
        {
            "stepType":"oss",//Nama plug-in.
            "parameter":{
                "nullFormat":"",//String yang merepresentasikan nilai null.
                "compress":"",//Jenis kompresi teks.
                "datasource":"",//Sumber data.
                "column":[//Kolom.
                    {
                        "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":"",//File mirip CSV mungkin berisi baris header. Atur parameter ini untuk melewati header.
                "encoding":"",//Format encoding.
                "fieldDelimiter":",",//Pemisah kolom.
                "fileFormat": "",//Tipe teks.
                "object":[]//Awalan objek.
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":""//Jumlah maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,//Jika throttle diatur ke false, parameter mbps tidak berlaku, yang berarti pembatasan kecepatan dinonaktifkan. Jika throttle diatur ke true, pembatasan kecepatan diaktifkan.
            "concurrent":1 //Jumlah thread konkuren.
            "mbps":"12",//Laju pembatasan. 1 mbps = 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Demo skrip Reader: Membaca file ORC atau Parquet dari OSS

OSS Reader membaca file ORC atau Parquet dari OSS dengan menggunakan kembali HDFS Reader. Selain parameter OSS Reader yang sudah ada, parameter tambahan berikut ditambahkan: Path (ORC) dan FileFormat (ORC, Parquet) .

  • 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"
          }
        ]
      }
    }

Demo skrip Reader: Membaca file JSONLine dari OSS, mengurai data JSON, dan menulis data ke tujuan

Contoh berikut menunjukkan cara membaca data JSONLine dari OSS, mengurai data JSON, melakukan vektorisasi pada bidang tertentu dalam data JSON, lalu menulis data ke Milvus:

{
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "oss",
            "parameter": {
                "datasource": "${OSS data source name}",
                "column": [
                    {
                        "name": "chunk_text",
                        "index": 0,
                        "type": "string"
                    }
                ],
                "fieldDelimiter": ",",
                "encoding": "UTF-8",
                "fileFormat": "jsonl",
                "object": [
                    "embedding/chunk1.jsonl"
                ]
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "json-extracting",
            "parameter": {
                "column": [
                    {
                        "name": "text",
                        "fromColumn": "chunk_text",
                        "jsonPath": "$.text",
                        "type": "STRING",
                        "nullOrInvalidDataAction": "DIRTY_DATA"
                    }
                ]
            },
            "name": "jsonextract",
            "category": "flatmap"
        },
        {
            "stepType": "embedding-transformer",
            "parameter": {
                "modelProvider": "bailian",
                "modelName": "text-embedding-v4",
                "apiKey": "${the AccessKey that you want to use}",
                "embeddingColumns": {
                    "sourceColumnNames": [
                        "text"
                    ],
                    "embeddingColumnName": "my_vector"
                },
                "batchSize": 8,
                "dimension": 1024
            },
            "name": "embedding",
            "category": "flatmap"
        },
        {
            "stepType": "milvus",
            "parameter": {
                "schemaCreateMode": "ignore",
                "enableDynamicSchema": true,
                "datasource": "${Milvus data source name}",
                "column": [
                    {
                        "name": "my_vector",
                        "type": "FloatVector",
                        "dimension": "1024",
                        "elementType": "None",
                        "maxLength": "65535"
                    },
                    {
                        "name": "text",
                        "type": "VarChar",
                        "elementType": "None",
                        "maxLength": "65535"
                    }
                ],
                "collection": "yunshi_vector_07171130",
                "writeMode": "insert",
                "batchSize": 1024,
                "columnMapping": [
                    {
                        "sourceColName": "my_vector",
                        "dstColName": "my_vector"
                    },
                    {
                        "sourceColName": "text",
                        "dstColName": "text"
                    }
                ]
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": "0"
        },
        "speed": {
            "concurrent": 1
        }
    }
}

Parameter skrip Reader

Parameter

Deskripsi

Wajib

Nilai default

datasource

Nama sumber data. Mode skrip mendukung penambahan sumber data. Nilai parameter ini harus sama dengan nama sumber data yang ditambahkan.

Ya

N/A

Object

Parameter ini menentukan satu atau beberapa objek untuk disinkronkan dari OSS. Tiga metode konfigurasi didukung: jalur eksplisit, jalur wildcard, dan jalur parameter dinamis.

1. Metode konfigurasi

  • Jalur eksplisit

    • Aturan dasar: Jalur dimulai dari Direktori root bucket dan tidak perlu mencantumkan nama bucket.

    • Tentukan satu file: Masukkan jalur lengkap file. Contoh: my_folder/my_file.txt.

    • Tentukan beberapa objek: Pisahkan jalur beberapa file atau folder dengan koma (,). Contoh: folder_a/file1.txt, folder_a/file2.txt.

  • Jalur wildcard

    • Anda dapat menggunakan wildcard untuk mencocokkan beberapa file yang memenuhi pola tertentu.

    • *: Mencocokkan nol atau lebih karakter arbitrer.

    • ?: Mencocokkan tepat satu karakter arbitrer.

    • Contoh:

      • abc*[0-9].txt dapat mencocokkan abc0.txt, abc10,txt, abc_test_9.txt, dan lainnya.

      • abc?.txt dapat mencocokkan abc1.txt, abcX.txt, dan lainnya.

  • Jalur parameter dinamis

    • Anda dapat menyematkan parameter penjadwalan dalam jalur untuk mengaktifkan sinkronisasi otomatis. Saat tugas dijalankan, parameter diganti dengan nilai aktualnya.

    • Contoh: Jika Anda mengatur jalur ke raw_data/${bizdate}/abc.txt, tugas tersebut secara dinamis menyinkronkan folder yang sesuai dengan tanggal bisnis setiap hari.

    • Untuk informasi lebih lanjut tentang parameter penjadwalan, lihat Sumber dan ekspresi parameter penjadwalan.

Penting
  • Gunakan wildcard dengan hati-hati. Penggunaan wildcard (terutama *) memicu pemindaian traversal jalur OSS. Ketika jumlah file besar, hal ini dapat mengonsumsi banyak memori dan waktu, bahkan dapat menyebabkan tugas gagal karena kehabisan memori. Kami menyarankan agar Anda tidak menggunakan wildcard luas di lingkungan produksi. Jika mengalami masalah ini, pisahkan file ke direktori berbeda sebelum sinkronisasi.

  • Sistem sinkronisasi data memperlakukan semua objek yang disinkronkan dalam satu pekerjaan sebagai satu tabel data. Anda harus memastikan bahwa semua objek sesuai dengan skema yang sama.

2. Mekanisme baca konkuren dan kinerja

Metode konfigurasi secara langsung menentukan kinerja konkurensi ekstraksi data:

  • Mode single-thread: Saat Anda menentukan hanya satu file eksplisit non-terkompresi, tugas mengekstraksi data dalam mode single-thread.

  • Mode multi-thread: Saat Anda menentukan beberapa file eksplisit atau menggunakan wildcard yang mencocokkan beberapa file, tugas secara otomatis mengaktifkan pembacaan konkuren multi-threaded untuk meningkatkan efisiensi ekstraksi secara signifikan. Anda dapat mengonfigurasi jumlah thread konkuren di Channel Control.

Ya

Tidak ada

parquetSchema

Parameter ini digunakan saat Anda membaca data OSS dalam format file Parquet. Parameter ini hanya berlaku ketika fileFormat diatur ke parquet, dan menentukan definisi tipe penyimpanan Parquet. Pastikan konfigurasi keseluruhan sesuai dengan sintaks JSON setelah Anda menentukan parquetSchema.

message MessageTypeName {
required_or_optional, data_type, column_name;
......................;
}

Format konfigurasi parquetSchema dijelaskan sebagai berikut:

  • Nama MessageType: Tentukan nama.

  • Wajib atau opsional: required menunjukkan bahwa bidang tidak boleh null, dan optional menunjukkan bahwa bidang dapat null. Kami menyarankan agar Anda mengatur semua bidang sebagai optional.

  • Tipe data: File Parquet mendukung tipe BOOLEAN, Int32, Int64, Int96, FLOAT, DOUBLE, BINARY (gunakan BINARY untuk tipe string), dan fixed_len_byte_array.

  • Setiap definisi kolom harus diakhiri dengan titik koma, termasuk baris terakhir.

Contoh berikut menunjukkan konfigurasi sampel.

"parquetSchema": "message m { optional int32 minute_id; optional int32 dsp_id; optional int32 adx_pid; optional int64 req; optional int64 res; optional int64 suc; optional int64 imp; optional double revenue; }"

Tidak

Tidak ada

column

Daftar bidang yang akan dibaca. type menentukan tipe data sumber data, index menentukan nomor kolom (berbasis nol) dalam file teks yang sesuai dengan kolom saat ini, dan value menentukan bahwa kolom saat ini adalah konstanta. Alih-alih membaca data dari file sumber, sistem secara otomatis menghasilkan kolom berdasarkan nilai yang ditentukan.

Secara default, Anda dapat membaca semua data sebagai tipe STRING. Konfigurasinya sebagai berikut.

"column": ["*"]

Anda dapat menentukan informasi bidang kolom. Konfigurasinya sebagai berikut.

"column":
    {
       "type": "long",
       "index": 0    //Ambil bidang INT dari kolom pertama teks OSS.
    },
    {
       "type": "string",
       "value": "alibaba"  //Hasilkan bidang string "alibaba" dari OSSReader sebagai bidang saat ini.
    }
Catatan

Untuk informasi kolom yang Anda tentukan, parameter type wajib, dan Anda harus menentukan salah satu antara index atau value.

Ya

Semua data dibaca sebagai tipe STRING.

fileFormat

Tipe file. Tipe file objek OSS sumber. Nilai yang valid: csv, text, parquet, orc, json, dan jsonl. Format csv dan text mendukung pemisah kustom.

Ya

csv

fieldDelimiter

Pemisah bidang untuk membaca data.

Catatan

Saat OSS Reader membaca data, Anda harus menentukan pemisah bidang. Jika tidak ditentukan, koma (,) digunakan secara default. Koma (,) juga merupakan nilai default dalam konfigurasi konsol.

Jika pemisah tidak terlihat, masukkan encoding Unicode-nya. Misalnya, \u001b atau \u007c.

Ya

,

lineDelimiter

Pemisah baris untuk membaca data.

Catatan

Parameter ini hanya berlaku saat fileFormat diatur ke text.

Tidak

N/A

compress

Jenis kompresi untuk file teks. Secara default, parameter ini dibiarkan kosong, yang menunjukkan bahwa data tidak dikompresi. Nilai yang valid: gzip, bzip2, dan zip.

Tidak

Tidak ada kompresi

encoding

Encoding yang digunakan untuk membaca file.

Tidak

utf-8

nullFormat

String standar tidak dapat digunakan untuk mendefinisikan null (null pointer) dalam file teks. Data Integration menyediakan parameter nullFormat untuk mendefinisikan string mana yang dapat merepresentasikan null. Contoh:

  • Jika Anda mengonfigurasi nullFormat:"null", yang setara dengan "karakter terlihat", dan data sumber adalah null, Data Integration memperlakukan bidang tersebut sebagai bidang null.

  • Jika Anda mengonfigurasi nullFormat:"\u0001", yang setara dengan "karakter tidak terlihat", dan data sumber adalah string "\u0001", Data Integration memperlakukan bidang tersebut sebagai bidang null.

  • Jika Anda tidak menentukan parameter "nullFormat", yang setara dengan "tidak dikonfigurasi", data sumber ditulis ke tujuan apa adanya tanpa konversi apa pun.

Tidak

Tidak ada

skipHeader

File mirip CSV mungkin berisi baris header dengan judul kolom yang perlu dilewati. Secara default, header tidak dilewati. skipHeader tidak didukung dalam mode file terkompresi.

Tidak

false

csvReaderConfig

Konfigurasi untuk membaca file mirip CSV. Parameter ini bertipe MAP. CsvReader digunakan untuk membaca file mirip CSV dan mendukung berbagai konfigurasi. Jika parameter ini tidak ditentukan, nilai default digunakan.

Tidak

Tidak ada

successOnNoObject

Menentukan apakah tugas berakhir sukses saat tidak ada objek di jalur baca yang ditentukan. Jika parameter ini diatur ke false, tugas gagal. Jika diatur ke true, tugas berakhir sukses tanpa menulis data apa pun. Parameter ini berlaku untuk skenario sinkronisasi periodik di mana jalur sumber mungkin kosong. Dalam mode Antarmuka tanpa kode, parameter ini sesuai dengan "Allow Missing Source Files" dan hanya ditampilkan saat fileFormat diatur ke csv atau text.

Tidak

false

minLastModified

Menentukan bahwa hanya file yang waktu modifikasi terakhirnya sama dengan atau lebih baru dari waktu yang ditentukan yang disinkronkan. Formatnya adalah yyyyMMddHHmmss. Misalnya, jika Anda mengonfigurasi "minLastModified": "20250101000000", hanya file yang dimodifikasi pada atau setelah 1 Januari 2025, 00:00:00 yang dibaca, dan file sebelumnya difilter. Anda dapat menggunakan parameter ini bersama dengan maxLastModified untuk membentuk interval [min, max) tertutup kiri, terbuka kanan.

Tidak

N/A

maxLastModified

Hanya menyinkronkan file yang waktu modifikasi terakhirnya lebih awal dari waktu yang ditentukan. Formatnya adalah yyyyMMddHHmmss. Misalnya, jika Anda mengatur "maxLastModified": "20250102000000", hanya file yang dimodifikasi sebelum 00:00:00 pada 2 Januari 2025 yang dibaca. File yang dimodifikasi tepat pada waktu tersebut dikecualikan (interval terbuka kanan). Anda dapat menggunakan parameter ini bersama dengan minLastModified untuk menentukan interval [min, max) tertutup kiri, terbuka kanan.

Tidak

N/A

Demo skrip Writer: Contoh umum

Berikut adalah contoh skrip umum untuk OSS Writer.

{
    "type":"job",
    "version":"2.0",
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"oss",// Nama plug-in.
            "parameter":{
                "nullFormat":"",// Format null yang disediakan oleh Data Integration, yang mendefinisikan string apa yang dapat merepresentasikan null.
                "dateFormat":"",// Format tanggal.
                "datasource":"",// Sumber data.
                "writeMode":"",// Mode tulis.
                "writeSingleObject":"false", // Menentukan apakah data yang disinkronkan ditulis ke satu file OSS.
                "encoding":"",// Format encoding.
                "fieldDelimiter":","// Pemisah kolom.
                "fileFormat":"",// Format file.
                "object":""// Awalan objek.
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// Jumlah maksimum catatan error yang diizinkan.
        },
        "speed":{
            "throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berlaku dan bandwidth tidak dibatasi. Jika throttle diatur ke true, bandwidth dibatasi.
            "concurrent":1, // Jumlah thread konkuren.
            "mbps":"12"// Laju pembatasan. 1 mbps = 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Demo skrip Writer: Menulis file ORC atau Parquet ke OSS

OSS mendukung penulisan file ORC atau Parquet dengan menggunakan kembali HDFS Writer. Selain parameter OSS Writer yang sudah ada, parameter konfigurasi tambahan seperti Path dan FileFormat ditambahkan. Untuk informasi tentang parameter ini, lihat HDFS Writer.

Berikut adalah contoh penulisan file ORC atau Parquet ke OSS:

Penting

Berikut hanya contoh. Modifikasi parameter berdasarkan nama dan tipe kolom aktual Anda. Jangan salin dan gunakan contoh ini secara langsung.

  • Menulis file ORC ke OSS

    Untuk menulis file ORC, hanya mode skrip yang didukung. Anda harus beralih ke mode skrip untuk konfigurasi. Atur fileFormat ke orc, atur path ke jalur file yang akan ditulis, dan konfigurasi column dalam format {"name":"nama kolom Anda","type": "tipe kolom Anda"}.

    Tipe ORC berikut didukung untuk penulisan:

    Tipe bidang

    Tulis batch ke OSS (format ORC)

    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"
    }
    ],
    "writeMode": "append",
    "fieldDelimiter": "\t",
    "compress": "NONE",
    "encoding": "UTF-8"
    }
    }
  • Menulis 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 dalam mode skrip. Nilai parameter ini harus sama dengan nama sumber data yang Anda tambahkan.

Ya

N/A

object

Nama file yang ditulis oleh OSS Writer. OSS menggunakan nama file untuk mensimulasikan struktur direktori. OSS memberlakukan batasan berikut pada nama objek:

  • Jika Anda menggunakan "object": "datax", nama objek yang ditulis dimulai dengan datax, diikuti dengan sufiks string acak.

  • Jika Anda menggunakan "object": "cdo/datax", nama objek yang ditulis dimulai dengan /cdo/datax, diikuti dengan sufiks string acak. OSS menggunakan garis miring (/) sebagai pemisah direktori.

Jika Anda tidak ingin sufiks UUID acak, kami menyarankan Anda mengatur "writeSingleObject" : "true". Untuk informasi lebih lanjut, lihat deskripsi writeSingleObject.

Ya

N/A

ossBlockSize

Ukuran blok untuk unggah multi-bagian OSS. Ukuran blok default adalah 16 MB. Saat format file adalah parquet atau ORC, Anda dapat mengonfigurasi parameter ini pada level yang sama dengan parameter object.

Unggah multi-bagian OSS mendukung maksimal 10.000 bagian. Dengan ukuran blok default, ukuran file maksimum adalah 160 GB. Jika jumlah bagian melebihi batas, Anda dapat meningkatkan ukuran blok untuk mendukung unggah file yang lebih besar.

Tidak

16

writeMode

Menentukan bagaimana OSS Writer menangani data yang sudah ada sebelum menulis:

  • truncate: Sebelum menulis, menghapus semua objek yang namanya cocok dengan awalan yang ditentukan. Misalnya, jika Anda mengatur "object":"abc", semua objek yang namanya dimulai dengan abc dihapus.

  • append: Tidak ada pemrosesan sebelum menulis. Data Integration OSS Writer menulis data langsung menggunakan nama objek dan menambahkan sufiks UUID acak untuk memastikan nama file unik. Misalnya, jika Anda menentukan nama objek sebagai DI, nama objek yang ditulis sebenarnya adalah DI_****_****_****.

  • nonConflict: Jika ada objek dengan awalan yang cocok di jalur yang ditentukan, kesalahan dikembalikan. Misalnya, jika Anda mengatur "object":"abc" dan objek bernama abc123 ada, kesalahan dikembalikan.

Ya

Tidak ada

writeSingleObject

Menentukan apakah data ditulis ke satu file saat menulis data ke OSS:

  • true: Menulis data ke satu file. Jika tidak ada data yang dibaca, file kosong tidak dihasilkan.

  • false: Menulis data ke beberapa file. Jika tidak ada data yang dibaca dan header file dikonfigurasi, file kosong yang hanya berisi header file dihasilkan. Jika tidak, hanya file kosong yang dihasilkan.

Catatan
  • Saat Anda menulis data dalam format ORC atau Parquet, parameter writeSingleObject tidak berlaku. Artinya, Anda tidak dapat menggunakan parameter ini untuk menulis data ke satu file ORC atau Parquet dalam skenario multi-konkurensi. Untuk menulis data ke satu file, Anda dapat mengatur konkurensi ke 1. Namun, sufiks acak ditambahkan ke nama file, dan pengaturan konkurensi ke 1 mengurangi kecepatan sinkronisasi.

  • Dalam skenario tertentu, seperti saat sumber adalah Hologres, data dibaca berdasarkan shard. Satu konkurensi mungkin tetap menghasilkan beberapa file.

Tidak

false

fileFormat

Format file output. Format berikut didukung:

  • csv: Hanya format csv ketat yang didukung. Jika data yang akan ditulis berisi pemisah kolom, data tersebut dilakukan escape berdasarkan sintaks escape csv. Karakter escape adalah tanda kutip ganda (").

  • text: Data yang akan ditulis hanya dipisahkan oleh pemisah kolom. Jika data yang akan ditulis berisi pemisah kolom, tidak ada escaping yang dilakukan.

  • parquet: Jika Anda menggunakan tipe file ini, Anda harus menambahkan parameter parquetSchema untuk mendefinisikan tipe data.

    Penting
  • ORC: Jika Anda menggunakan format ini, Anda harus beralih ke mode skrip.

  • json, jsonl: Data ditulis dalam format JSON.

Tidak

text

compress

Format kompresi file data yang ditulis ke OSS. Anda harus mengonfigurasi parameter ini dalam mode skrip.

Penting

Kompresi tidak didukung untuk format CSV dan TEXT. File Parquet dan ORC hanya mendukung kompresi SNAPPY.

Tidak

Tidak ada

fieldDelimiter

Pemisah bidang untuk menulis.

Tidak

,

encoding

Konfigurasi encoding untuk file output.

Tidak

utf-8

parquetSchema

Diperlukan saat menulis ke OSS dalam format file Parquet. Parameter ini menjelaskan skema file tujuan dan hanya berlaku saat fileFormat diatur ke parquet. Formatnya sebagai berikut.

message MessageTypeName {
required_or_optional, data_type, column_name;
......................;
}

Item konfigurasi dijelaskan sebagai berikut:

  • Nama MessageType: Masukkan nama.

  • Wajib atau tidak: required menunjukkan bahwa bidang tidak boleh null, dan optional menunjukkan bahwa bidang dapat null. Kami menyarankan agar Anda mengatur semua bidang sebagai optional.

  • Tipe data: File Parquet mendukung tipe berikut: BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (gunakan BINARY untuk tipe string), dan FIXED_LEN_BYTE_ARRAY.

Catatan

Setiap definisi kolom harus diakhiri dengan titik koma, termasuk baris terakhir.

Contoh:

message m {
optional int64 id;
optional int64 date_id;
optional binary datetimestring;
optional int32 dspId;
optional int32 advertiserId;
optional int32 status;
optional int64 bidding_req_num;
optional int64 imp;
optional int64 click_num;
}

Tidak

Tidak ada

nullFormat

String standar tidak dapat digunakan untuk mendefinisikan null (null pointer) dalam file teks. Sistem sinkronisasi data menyediakan nullFormat untuk mendefinisikan string yang merepresentasikan null. Misalnya, jika Anda mengatur nullFormat="null" dan data sumber adalah null, sistem sinkronisasi data memperlakukannya sebagai bidang null.

Tidak

Tidak ada

header

Baris header saat menulis ke OSS. Contoh: ["id", "name", "age"].

Tidak

Tidak ada

maxFileSize (konfigurasi lanjutan, tidak didukung di Antarmuka 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 mencetak log log4j. Selama unggah multi-bagian OSS, setiap bagian berukuran 10 MB (yang juga merupakan granularitas minimum untuk rotasi log, artinya nilai maxFileSize kurang dari 10 MB diperlakukan sebagai 10 MB). Setiap OSS InitiateMultipartUploadRequest mendukung maksimal 10.000 bagian.

Saat rotasi terjadi, nama objek dihasilkan dengan menambahkan sufiks seperti _1,_2,_3 ke awalan objek asli dengan string acak berbasis UUID.

Catatan
  • Unit default adalah MB.

  • Contoh konfigurasi: "maxFileSize":300 mengatur ukuran maksimum satu file menjadi 300 MB.

  • maxFileSize hanya berlaku untuk format CSV dan TEXT. Ukuran file dihitung pada level memori proses tugas sinkronisasi dan tidak dapat mengontrol secara tepat ukuran file aktual yang ditulis ke tujuan. Selama proses penulisan, ekspansi data dapat menyebabkan ukuran file aktual melebihi nilai yang diharapkan.

Tidak

100.000

suffix (konfigurasi lanjutan, tidak didukung di Antarmuka tanpa kode)

Sufiks yang ditambahkan ke nama file yang dihasilkan selama penulisan sinkronisasi data. Misalnya, jika Anda mengatur suffix ke .csv, nama file akhir adalah fileName****.csv.

Tidak

Tidak ada

Lampiran: Strategi konversi tipe untuk data Parquet

Jika Anda tidak mengonfigurasi parquetSchema, DataWorks mengonversi tipe bidang sumber ke tipe data Parquet berdasarkan strategi berikut.

Tipe data yang dikonversi

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