> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder.md).

# Transformation Builder

Buat transformasi IoT Query kustom dengan editor alur kerja visual. Konfigurasikan node SQL, pratinjau hasil, validasi alur kerja, dan jadwalkan eksekusi

{% hint style="info" %}

#### Segera hadir!

Transformation Builder saat ini masih dalam pengembangan. Deskripsi fitur pada halaman ini mencerminkan fungsionalitas yang direncanakan. Detail implementasi dapat berkembang sebelum rilis final. Jika Anda tertarik pada akses awal atau memiliki pertanyaan, hubungi <iotquery@navixy.com>.
{% endhint %}

## Apa itu Transformation Builder

**Pembuat transformasi** adalah alat visual untuk merancang alur kerja transformasi data tanpa perlu mengembangkan dan memelihara pipeline data yang kompleks. Anda menyusun logika pemrosesan sebagai grafik tempat setiap langkah diwakili oleh blok terpisah (node), dan alat ini mengompilasi grafik Anda menjadi SQL yang dapat dieksekusi.

Transformation Builder dirancang untuk analis, spesialis BI, dan siapa pun yang memiliki pengetahuan dasar SQL yang ingin mengendalikan logika persiapan data secara mandiri. Alat ini membantu Anda menjawab pertanyaan kunci dalam persiapan data: dari mana data berasal, bagaimana data digabungkan, filter dan transformasi apa yang diterapkan, bagaimana deret waktu diagregasi, dan dalam bentuk apa data harus muncul di [Lapisan transformasi](/docs/analytics/id/iot-query/schema-overview/transformation-layer.md).

Transformation Builder bukan orkestrator ETL penuh atau platform data. Ini adalah perancang alur kerja terfokus yang mengompilasi grafik node Anda menjadi kueri SQL dan fungsi basis data terjadwal. Template alur kerja siap pakai untuk transformasi umum Navixy tersedia di [Templates](/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder/templates.md) .

## Cara kerjanya

Sebuah alur kerja di Transformation Builder adalah grafik node terarah yang disusun dari sumber data ke keluaran:

<figure><img src="https://1696125515-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoFNFEIINiGFbhi3Px3dE%2Fuploads%2Fgit-blob-a74268228ff712c9e4192afa5d2ad87fb5f93d50%2FBasic-flow-example.png?alt=media" alt="workflow graph example showing sources, transformations, and output"><figcaption><p align="center"><strong>Sumber data mentah → Node transformasi → Keluaran</strong></p></figcaption></figure>

Setiap node sesuai dengan satu langkah pemrosesan logis. Anda dapat menggabungkan beberapa sumber menjadi satu node transformasi, dan hasil dari satu node dapat mengisi beberapa node hilir. Grafik ini memberi Anda representasi visual yang jelas atas seluruh alur data dari tabel sumber ke entitas analitis target.

Builder mengompilasi grafik Anda menjadi satu kueri SQL dengan menggunakan ekspresi tabel umum (CTE). Setiap node menjadi CTE dalam kueri final. Pendekatan kompilasi ini berarti Builder tidak menulis data langsung ke basis data. Sebaliknya, Builder menghasilkan konfigurasi yang menjalankan pemrosesan data sebenarnya berdasarkan jadwal.

{% hint style="warning" %}
Data dalam grafik harus mengalir hanya dalam satu arah. Siklus tidak diperbolehkan. Jika Builder mendeteksi siklus, Builder akan mengembalikan galat validasi.
{% endhint %}

### Menghubungkan ke basis data

Sebelum Anda mulai membangun alur kerja, Anda perlu menyambungkan ke basis data PostgreSQL Anda. Tanpa koneksi aktif, pratinjau data dan penemuan tabel tidak tersedia.

Panel koneksi memungkinkan Anda menentukan [Connection URL](/docs/analytics/id/iot-query/connection-setup.md#connection-string-format), menyambung atau memutuskan sambungan, dan melihat jumlah tabel yang ditemukan di setiap kategori. Builder menggunakan dua skema dalam basis data Anda:

* `raw_telematics_data` untuk data telematika dan data sensor perangkat
* `raw_business_data` untuk data referensi bisnis (kendaraan, karyawan, geofence, dan entitas serupa)

Setelah tersambung, Builder secara otomatis menemukan tabel dan kolom yang tersedia, yang kemudian dapat Anda pilih saat mengonfigurasi node Sumber Data.

<figure><img src="https://1696125515-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoFNFEIINiGFbhi3Px3dE%2Fuploads%2Fgit-blob-d059f27250d15460203d3ffe972d7e4be190f9d9%2FConnection-url.png?alt=media" alt="connection panel showing URL input and discovered table counts"><figcaption></figcaption></figure>

### Node Sumber Data

Node Sumber Data menentukan dari mana alur kerja Anda membaca data. Setiap node Sumber Data sesuai dengan satu tabel di lapisan data mentah.

<details>

<summary>Data mentah: Telematika</summary>

Node ini memuat data deret waktu dari `raw_telematics_data` skema.

| Parameter               | Deskripsi                                                                                                         |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Nama tabel**          | Pilih dari daftar tabel yang ditemukan saat Anda tersambung ke basis data.                                        |
| **Kolom waktu**         | Kolom stempel waktu yang digunakan untuk pengurutan dan filter berbasis waktu. Nilai bawaan adalah `device_time`. |
| **Kolom**               | Daftar kolom tertentu yang akan disertakan, atau `*` untuk memilih semua kolom.                                   |
| **Kondisi filter**      | Kondisi SQL opsional `WHERE` yang diterapkan langsung pada kueri sumber.                                          |
| **Menit jendela waktu** | Batas waktu opsional (dalam menit) untuk membatasi jendela data dalam SQL. Biarkan kosong jika tidak ada batas.   |

Setiap node Data mentah: Telematika membaca dari tepat satu tabel. Untuk menggunakan data dari beberapa tabel, tambahkan node terpisah untuk setiap tabel.

</details>

<details>

<summary>Data mentah: Bisnis</summary>

Node ini memuat data referensi dari the `raw_business_data` skema. Tabel yang umum meliputi `objek`, `Kendaraan`, `perangkat`, dan `sensor_description`.

| Parameter       | Deskripsi                                                                       |
| --------------- | ------------------------------------------------------------------------------- |
| **Nama tabel**  | Pilih dari daftar tabel bisnis yang ditemukan.                                  |
| **Kolom kunci** | Kolom kunci untuk tabel ini (misalnya, `id_objek` atau `sensor_id`).            |
| **Kolom**       | Daftar kolom tertentu yang akan disertakan, atau `*` untuk memilih semua kolom. |

Data mentah: node bisnis terutama digunakan sebagai input kedua untuk node SQL Transform, sehingga Anda dapat menggabungkan data referensi dengan deret waktu telematika.

</details>

### Simpul transformasi

Node transformasi menentukan apa yang terjadi pada data Anda setelah dimuat dari sumber. Setiap jenis transformasi menangani pola pemrosesan tertentu.

<details>

<summary>Transformasi SQL</summary>

Menggabungkan data dari tepat dua node sumber menggunakan SQL `Gabung` operasi.

| Parameter        | Deskripsi                                                                                                                                    |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **Jenis join**   | Jenis join: `INNER`, `LEFT`, `RIGHT`, atau `FULL` (full outer join).                                                                         |
| **Kondisi join** | Kondisi untuk mencocokkan baris antara dua input (misalnya, mencocokkan pada `device_id`).                                                   |
| **Pilih kolom**  | Daftar kolom yang akan disertakan dalam keluaran. Mendukung notasi prefiks seperti `source.*` untuk memilih semua kolom dari input tertentu. |

Transformasi SQL memerlukan tepat dua masukan. Masukan tersebut dapat berupa kombinasi apa pun dari simpul Sumber Data atau keluaran dari simpul transformasi lainnya.

</details>

<details>

<summary>Filter</summary>

Memfilter data berdasarkan rentang waktu dan kondisi kustom. Semua kondisi dieksekusi di basis data sebagai bagian dari `WHERE` klausa (penyaringan pushdown).

| Parameter                      | Deskripsi                                                                                                       |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| **Kolom waktu**                | Kolom stempel waktu yang digunakan untuk penyaringan berbasis waktu. Defaultnya adalah `device_time`.           |
| **Awal / akhir rentang waktu** | Batas awal dan akhir untuk filter waktu.                                                                        |
| **Kondisi dinamis**            | Daftar kondisi SQL yang digabungkan dengan `AND`. Gunakan ini untuk pemfilteran tambahan di luar rentang waktu. |

</details>

<details>

<summary>Resampling</summary>

Mengagregasikan data deret waktu ke dalam interval waktu tetap. Ini berguna untuk mengonversi titik data berfrekuensi tinggi menjadi statistik ringkasan dalam periode reguler.

| Parameter                | Deskripsi                                                                                                                                                   |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Kolom waktu**          | Kolom timestamp yang digunakan untuk pengelompokan interval. Secara default `device_time`.                                                                  |
| **Interval**             | Interval agregasi: `1min`, `5min`, `15min`, `1hour`, atau `1day`.                                                                                           |
| **Kelompok berdasarkan** | Kolom tambahan untuk dikelompokkan berdasarkan (selain interval waktu).                                                                                     |
| **Agregasi**             | Daftar pasangan kolom-metode yang menentukan bagaimana setiap kolom diagregasi. Metode yang tersedia: `avg`, `sum`, `min`, `max`, `first`, `last`, `count`. |

</details>

<details>

<summary>Aritmetika</summary>

Menambahkan atau mengganti kolom menggunakan ekspresi SQL. Gunakan node ini untuk membuat kolom terhitung berdasarkan data yang ada.

| Parameter    | Deskripsi                                                                                                                |
| ------------ | ------------------------------------------------------------------------------------------------------------------------ |
| **Ekspresi** | Daftar definisi ekspresi. Setiap entri mencakup kolom sumber opsional, ekspresi SQL, dan alias keluaran yang diperlukan. |

Misalnya, untuk mengonversi nilai kecepatan, Anda dapat menetapkan kolom sumber ke `kecepatan`, ekspresi ke `speed * 1.2`, dan alias ke `speed_adjusted`. Alias wajib untuk setiap ekspresi.

</details>

<details>

<summary>SQL kustom</summary>

Menyediakan masukan SQL bentuk bebas untuk logika kompleks yang tidak dapat dinyatakan oleh jenis node lain. Gunakan ini saat Anda memerlukan kendali penuh atas query.

| Parameter      | Deskripsi                                                                      |
| -------------- | ------------------------------------------------------------------------------ |
| **SQL kustom** | Sebuah `SELECT` query tempat node hulu dapat diakses melalui alias CTE mereka. |

Alias node sumber mengikuti pola `a_<node_id>` (misalnya, `a_node_1`, `a_filter_1`). Pengidentifikasi node dibersihkan menjadi pengidentifikasi SQL yang valid, dengan spasi dan karakter khusus diganti menjadi garis bawah.

Node SQL kustom menerima satu atau dua input. Query Anda dapat mereferensikan CTE yang sesuai melalui aliasnya.

</details>

### Konfigurasi keluaran

<details>

<summary>Keluaran</summary>

Itu **Keluaran** menentukan bagaimana hasil transformasi Anda harus ditulis ke Lapisan Transformasi. Ini menetapkan metadata tabel target yang digunakan runtime eksternal untuk menyimpan data yang telah diproses.

| Parameter               | Deskripsi                                                                                                                                                                                     |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nama tabel**          | Nama tabel target di `processed_custom_data` skema.                                                                                                                                           |
| **Kolom waktu**         | Kolom stempel waktu dalam data keluaran (misalnya, `device_time`).                                                                                                                            |
| **Partisi berdasarkan** | Ekspresi partisi untuk mengatur data tersimpan (misalnya, `DATE(device_time)`).                                                                                                               |
| **Kunci utama**         | Daftar kolom yang mengidentifikasi setiap baris secara unik (misalnya, `[device_id, device_time]`).                                                                                           |
| **Mode penulisan**      | Bagaimana data ditulis ke tabel tujuan: `menambahkan` (menambahkan baris baru), `menimpa` (mengganti data yang sudah ada), atau `upsert` (memperbarui baris yang ada, menyisipkan yang baru). |

</details>

## Membangun alur kerja

Alur kerja tipikal mengikuti langkah-langkah berikut:

{% stepper %}
{% step %}
**Buka Transformation Builder**

Luncurkan antarmuka Transformation Builder.
{% endstep %}

{% step %}
**Hubungkan ke basis data Anda**

Masukkan URL koneksi PostgreSQL Anda dan buat koneksi. Builder mendeteksi tabel dan kolom yang tersedia secara otomatis.
{% endstep %}

{% step %}
**Tambahkan node Sumber Data**

Tambahkan sebuah [**Data mentah: Telematika**](#raw-data-telematics) node dan pilih tabel serta kolom yang ingin Anda gunakan. Jika Anda memerlukan data referensi (misalnya, detail kendaraan atau deskripsi sensor), tambahkan sebuah [**Data mentah: Bisnis**](#raw-data-business) node juga.
{% endstep %}

{% step %}
**Tambahkan node transformasi**

Sisipkan node transformasi yang diperlukan alur kerja Anda:

* [**Transformasi SQL**](#sql-transform) untuk menggabungkan data
* [**Filter**](#filter) untuk mempersempit hasil
* [**Resampling**](#resampling) untuk mengagregasi deret waktu
* [**Aritmetika**](#arithmetic) untuk menambahkan kolom terhitung
* [**SQL kustom**](#custom-sql) untuk logika kompleks.
  {% endstep %}

{% step %}
**Konfigurasikan node Output**

Tambahkan [Keluaran](#output) node dan atur nama tabel tujuan, kolom kunci utama, dan mode penulisan untuk entitas analitik Anda.
{% endstep %}

{% step %}
**Hubungkan node**

Gambarkan sisi di antara node untuk menentukan aliran data. Hubungkan node sumber ke node transformasi, dan node transformasi ke node Output. Data mengalir dari kiri ke kanan, dari sumber ke output.
{% endstep %}

{% step %}
**Tinjau dan perbaiki galat**

Periksa petunjuk validasi untuk masalah konfigurasi apa pun. Perbaiki galat pada parameter node atau struktur graf sesuai kebutuhan.
{% endstep %}

{% step %}
**Pratinjau hasil**

Klik **Execute** untuk menjalankan pratinjau alur kerja Anda. Builder mengompilasi graf menjadi SQL dan mengeksekusinya pada basis data Anda, mengembalikan hingga 100 baris sehingga Anda dapat memverifikasi hasilnya.

{% hint style="info" %}
**Ekspor**

Anda dapat mengekspor alur kerja yang telah selesai sebagai file YAML untuk eksekusi runtime atau berbagi dengan rekan kerja. Lihat [Referensi YAML alur kerja](/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder/workflow-yaml-reference.md) untuk detail format.
{% endhint %}
{% endstep %}

{% step %}

#### Penjadwalan eksekusi

Klik **Jadwalkan** untuk membuka dialog konfigurasi, tempat Anda dapat menentukan waktu dan frekuensi eksekusi alur kerja secara tepat. Pada waktu yang ditetapkan, sebuah fungsi dalam basis data akan memicu alur kerja dan menyimpan hasilnya ke lapisan Transformation.
{% endstep %}
{% endstepper %}

<figure><img src="https://1696125515-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoFNFEIINiGFbhi3Px3dE%2Fuploads%2Fgit-blob-284bc5a571d1f159214d822c840d6be699ccac98%2FComplete-flow-example.png?alt=media" alt="completed workflow graph with all node types connected"><figcaption><p>Contoh aliran transformasi lengkap</p></figcaption></figure>

### Pratinjau hasil

Setelah Anda mengklik **Execute** di bilah alat, Builder mengompilasi graf alur kerja Anda menjadi satu kueri SQL dengan CTE dan menjalankannya pada basis data PostgreSQL yang terhubung. Hasilnya muncul di panel bawah.

**Saat eksekusi berhasil**, panel menampilkan:

* Tabel hasil yang menampilkan hingga 100 baris data keluaran
* Kueri SQL yang dieksekusi (kueri CTE lengkap yang dihasilkan oleh kompiler)
* Jumlah baris, jumlah kolom, dan waktu eksekusi
* Opsi untuk mengekspor hasil ke CSV

**Saat terjadi galat eksekusi**, panel menampilkan:

* Pesan galat yang menjelaskan apa yang salah
* Kueri SQL yang dieksekusi (jika kompilasi berhasil)
* Rincian galat basis data (jika galat terjadi selama eksekusi kueri)

{% hint style="warning" %}
Pratinjau hasil memerlukan koneksi PostgreSQL yang aktif. Tanpa koneksi, pratinjau mengembalikan hasil kosong tanpa SQL dieksekusi. Pratinjau selalu menggunakan data nyata dari basis data Anda, bukan data tiruan.
{% endhint %}

<figure><img src="https://1696125515-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoFNFEIINiGFbhi3Px3dE%2Fuploads%2Fgit-blob-d16d21dd58df9cea2fe996abeb4873df4e438da9%2FExecuted-flow-result.png?alt=media" alt="Results preview panel showing successful execution with result table and SQL"><figcaption><p>Hasil aliran yang dieksekusi</p></figcaption></figure>

## Validasi dan kompilasi

Builder memvalidasi alur kerja Anda pada dua tingkat.

1. **Validasi graf** memeriksa struktur keseluruhan alur kerja Anda. Graf harus berupa graf asiklik berarah (DAG) yang valid, yang berarti data mengalir dalam satu arah tanpa siklus. Jika Builder mendeteksi siklus, Builder mengembalikan galat dan menyorot node yang terdampak.
2. **Validasi node** memeriksa konfigurasi setiap node secara individual. Builder memverifikasi bahwa bidang yang diwajibkan telah diisi, bahwa kolom yang dirujuk ada dalam keluaran node hulu, dan bahwa parameter node konsisten dengan tipenya (misalnya, SQL Transform harus memiliki tepat dua input).

Selama kompilasi, Builder mengonversi graf Anda menjadi satu kueri SQL. Setiap node menjadi sebuah CTE dengan alias `a_<node_id>`. Node-node disusun dalam urutan topologis sehingga setiap CTE dapat mereferensikan keluaran node pendahulunya. Jika kompilasi gagal karena galat konfigurasi atau struktur graf yang tidak valid, Builder mengembalikan rincian galat beserta SQL parsial yang dapat dihasilkannya.

## Ekspor

### Ekspor dan impor YAML

Anda dapat mengekspor alur kerja yang telah selesai sebagai file YAML menggunakan **Ekspor** tombol di toolbar. File yang diekspor berisi definisi lengkap alur kerja dalam format versi 2, termasuk semua konfigurasi node, sisi graf, dan posisi tata letak.

Untuk memuat alur kerja yang sebelumnya disimpan, gunakan **Import** fungsi dan pilih sebuah `.yaml` atau `.yml` file. Untuk dokumentasi format lengkap, lihat [Referensi YAML alur kerja](/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder/workflow-yaml-reference.md).

## Keterbatasan saat ini

Transformation Builder saat ini berada pada rilis awalnya, dan beberapa batasan berlaku:

* **Pratinjau memerlukan koneksi PostgreSQL yang aktif.** Tanpa koneksi, Anda tidak dapat meninjau hasil. Pratinjau dibatasi hingga 100 baris.
* **Graf harus bebas siklus.** Data mengalir hanya dalam satu arah, dari sumber ke keluaran.
* **Tidak ada mesin eksekusi bawaan.** Builder menghasilkan konfigurasi dan SQL untuk eksekusi runtime eksternal. Builder tidak memproses atau menyimpan data sendiri.
* **Hanya pemrosesan batch.** Pemrosesan data streaming tidak didukung.

## Langkah berikutnya

* [**Templates**](/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder/templates.md): Konfigurasi alur kerja siap pakai yang dapat Anda impor dan sesuaikan di Transformation Builder.
* [**Lapisan transformasi**](/docs/analytics/id/iot-query/schema-overview/transformation-layer.md): Pelajari bagaimana lapisan transformasi mengatur data yang diproses ke dalam skema dan cara menanyakannya.
* [**Referensi YAML alur kerja**](/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder/workflow-yaml-reference.md): Tinjau spesifikasi lengkap untuk format ekspor dan impor YAML.
* [**Lapisan data mentah**](/docs/analytics/id/iot-query/schema-overview/bronze-layer.md): Jelajahi skema sumber (`raw_telematics_data` dan `raw_business_data`) yang menyediakan data masukan untuk alur kerja Anda.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://navixy.com/docs/analytics/id/iot-query/schema-overview/transformation-layer/transformation-builder.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
