Parser
Parser adalah entitas konfigurasi yang menentukan cara mengurai dan mentransformasi pesan dari class pesan sumber tertentu menjadi rekaman jenis target tertentu.

Konfigurasi parser memiliki tiga komponen berikut:
- Asosiasi class pesan sumber: Parser memproses pesan sumber dari satu class pesan sumber. Untuk mengetahui informasi selengkapnya, lihat kelas Pesan Sumber.
- Asosiasi versi jenis: Parser memancarkan rekaman proto dari satu versi jenis. Konfigurasi versi jenis menentukan kolom yang harus ada pada rekaman proto yang dikeluarkan dan menentukan strukturnya (skema). Untuk mengetahui informasi selengkapnya, lihat Jenis.
- Skrip Whistle: Skrip Whistle menentukan cara mengubah pesan sumber menjadi rekaman proto menggunakan logika pemetaan, parsing, dan transformasi. Skrip Whistle ditulis oleh pengguna; namun, Manufacturing Data Engine (MDE) menyediakan paket konfigurasi untuk kasus penggunaan umum. Untuk mengetahui informasi selengkapnya, lihat bagian berikut.
Definisi peluit
Whistle adalah bahasa pemetaan yang dapat digunakan untuk mengonversi data bertingkat kompleks dari satu skema ke skema lainnya. Dalam manufaktur, model data bisa jadi kompleks dan dapat berisi banyak struktur bertingkat dan berulang. Hal ini menyulitkan untuk mengekspresikan logika pemetaan dalam format prosedural. Whistle mengatasi masalah ini dengan menyediakan bahasa deklaratif yang memungkinkan Anda menentukan logika pemetaan dan transformasi secara alami.
Misalnya, Anda dapat menggunakan Whistle untuk menyelaraskan beberapa model data sensor di berbagai pabrik ke dalam model jenis MDE terpadu. Data sumber mungkin berisi struktur bertingkat, seperti daftar komponen atau hierarki fitur. Whistle memungkinkan Anda mengekspresikan logika pemetaan untuk struktur bertingkat ini secara alami, tanpa harus menulis kode prosedural.
Whistle juga mendukung fungsi yang memungkinkan Anda memecah pemetaan kompleks yang melibatkan struktur berulang menjadi fungsi. Hal ini mempermudah pemahaman dan pengelolaan kode pemetaan Anda, serta mempermudah penggunaan kembali kode.
Whistle memberikan manfaat dibandingkan pendekatan prosedural. Lihat contoh berikut:
Dengan contoh payload ini:
{
"payload": {
"tag": "vibration-sensor"
},
"details": {
"value": 0.24,
"timestamp": "2023-06-26 12:19:20.046000 UTC"
}
}
Dan skrip Whistle berikut:
package mde
[{
tagName: $root.payload.tag
timestamps: {
eventTimestamp: $root.details.timestamp
}
data: {
numeric: $root.details.value
}
}]
Dengan menerapkan skrip Whistle sebelumnya, parser akan menghasilkan rekaman proto seperti berikut:
[
{
"tagName": "vibration-sensor",
"timestamps": {
"eventTimestamp": "2023-06-26 12:19:20.046000 UTC"
},
"data": {
"value": 0.24
}
}
]
Untuk mengetahui informasi selengkapnya tentang sintaksis bahasa Whistle dan fungsi yang tersedia, lihat dokumentasi Whistle.
Perilaku runtime parser
Saat runtime, parser menerima semua pesan dari class pesan sumber yang terkait dengannya, menerapkan skrip Whistle yang dikonfigurasi pada setiap pesan, dan memancarkan satu atau beberapa rekaman proto dari jenis yang dikonfigurasi.
Catatan proto yang dimunculkan harus sesuai dengan konfigurasi jenis. Jika tidak mematuhi, pesan akan dipindahkan ke antrean pesan yang tidak terkirim.
Aturan asosiasi
Parser hanya dapat dikaitkan dengan satu class pesan dan satu versi jenis. Namun, parser dapat memancarkan satu atau beberapa rekaman selama rekaman tersebut merupakan versi jenis yang ditautkan ke parser. Output parser adalah array objek rekaman proto.

Memancarkan lebih dari satu rekaman dari parser berguna dalam skenario saat pesan sumber berisi array pembacaan atau peristiwa yang ingin Anda pisahkan. Parser memungkinkan Anda "memisahkan" pesan sumber menjadi beberapa catatan proto sehingga setiap pembacaan, misalnya, menjadi baris dalam tabel catatan di BigQuery.
Proto yang dikeluarkan dapat mereferensikan nama tag apa pun. Perilaku ini merupakan perubahan dari v1.1 dan v1.2 yang mencakup nama tag ke jenis. Setelah v1.3, catatan proto MDE yang dikeluarkan oleh parser mana pun dapat
Skema rekaman proto
Skema JSON yang harus dipatuhi oleh rekaman proto bergantung pada:
- Archetype: Arketipe spesifik yang terkait dengan jenis.
- Konfigurasi Jenis: Setelan konfigurasi yang ditentukan untuk jenis.
Arketipe menentukan skema dasar untuk data. Misalnya, jenis dalam keluarga arketipe discrete mengharuskan rekaman proto berisi nilai untuk atribut berikut:
tagNametimestamps.eventTimestampdata.complex
Jenis ini dapat menerapkan batasan lebih lanjut pada rekaman proto. Misalnya, Anda
dapat menentukan skema untuk kolom data, atau Anda dapat mewajibkan agar rekaman proto
memberikan referensi ke instance metadata.
Untuk mengetahui informasi selengkapnya, lihat referensi rekaman proto.
Pencarian data referensi
MDE menyediakan fungsi Whistle kustom untuk mencari nilai untuk kunci yang diberikan dari bucket pencarian.
Anda dapat mencari instance bucket pencarian berdasarkan kunci alaminya dengan memanggil fungsi
mde::lookupByKey
dalam skrip Whistle. Fungsi ini menggunakan lookupbucketName,
bucketVersion, dan naturalKey instance sebagai argumen, dan menampilkan
instance metadata terbaru untuk kunci alami yang diberikan. Anda dapat menggunakan
instance untuk mengisi kolom dalam rekaman proto di parser. Contoh:
"data" : {
"complex" : {
"VIN" : mde::lookupByKey("vin-lookup-bucket", input.vinKey, 1).VIN,
"vin_registration_time" : mde::lookupByKey("vin-lookup-bucket", input.vinKey, 1).vin_registration_time,
"ResultValue" : 163.0482614,
}
}
Batasan penamaan untuk Parser
Nama parser dapat berisi hal berikut:
- Huruf (huruf besar dan huruf kecil), angka, dan karakter khusus
-dan_. - Dapat berisi hingga 255 karakter.
Anda dapat menggunakan ekspresi reguler berikut untuk validasi: ^[a-z][a-z0-9\\-_]{1,255}$.
Jika Anda mencoba membuat entity yang melanggar batasan penamaan, Anda akan
mendapatkan 400 error.
Anda dapat menggunakan fungsi mde::sanitizeTagName() untuk memastikan bahwa nama Anda mematuhi batasan penamaan. Untuk mengetahui informasi selengkapnya, lihat
Fungsi MDE Whistle.