Data integration

Urai

Analyze a whole dataset top-down as a path of boards, then save the result as a dataset.

What Urai does

Urai analyzes one dataset as a path of boards. Each board works on the rows the board before it returns. Select any board to preview the path up to that point. Every preview and every save runs over all rows of the branch, never a sample.

Open it from Analyze → Urai, pick a dataset, then add boards.

Boards

BoardWhat it does
FilterKeeps rows that match all (or any) conditions: equals, contains, starts with, greater or less than, empty, not empty, and within the last (see below).
Expression columnAdds a column computed per row, for example 1 if actual_h > promised_h else 0. A row where the expression fails gets an empty value.
JoinAdds columns from another dataset, matched on up to three key pairs. Every row keeps unmatched rows with empty values (left join); matched rows only drops them (inner join). An empty key never matches, and a key that appears several times in the other dataset gives one row per match.
AggregateGroups by up to three columns and computes count, count distinct, sum, average, min or max.
Pivot tableRows by up to three columns, one column per value of a pivot column (at most 50), one measure. A pivot table ends the path.
SortOrders by up to five columns. Empty values always go last.

Within the last

within the last keeps rows whose date or timestamp falls in a window that ends now:

  • 7d: the last 7 calendar days, today included. 1d means since 00:00 today.
  • 24h: the last 24 hours.

Days are counted in the zone you pick: WIB (default), WITA, WIT or UTC. A cell can be an ISO timestamp, with or without an offset (no offset is read as UTC), or an ISO date, read in the chosen zone. Anything else never matches.

Chart

When the preview has a numeric column, Chart draws a bar chart (sum per category) or a line chart of the preview rows shown. To chart a whole dataset, aggregate first, so that each preview row is one category.

Save as dataset

Save as dataset runs the whole path over every row and writes the result as a new dataset in one step:

  • The dataset is a file you own, in the folder you choose.
  • Its lineage points to the source dataset and to every joined dataset.
  • It inherits their data markings before any row is written. People without those markings can see the file but not its rows.
  • If the path runs out of time, a board fails, or the result is too large (more than 1,000,000 rows or 256 MiB), nothing is saved.

A saved dataset is a snapshot. Saving again creates a new dataset.

After a save, Download CSV downloads the saved dataset. It contains every row up to 10,000; a larger result is refused with a clear message rather than cut. To get a larger result, aggregate or filter first.

Limits

  • One path runs for at most 30 seconds. When the time runs out during a preview, the answer says so and shows how many rows were read. Filter first to read the whole dataset.
  • Sort keeps at most 100,000 rows, aggregate at most 10,000 groups, and a joined dataset at most 200,000 rows.
  • Paths run in an isolated process with its own memory limit. A path that needs more memory or time is stopped and reported; it never slows the rest of Converge.

Permissions

You need read access to every dataset in the path (the source and each joined dataset), including their data markings. Saving also needs permission to create datasets, and editor access to the target folder when you pick one.

Use a Urai result in a Rakit app

Rakit tables, charts and metrics read objects, so a saved Urai dataset reaches a Rakit app through an object type backed by that dataset:

  1. Save the path as a dataset. Aggregated results work best, because their group columns (for example hub, or hub and route) identify each row and can serve as the primary key.
  2. In Build → Type Authoring, create an object type with the saved dataset as its Backing dataset and that key column as its primary key.
  3. Run Populate from dataset on the object type (preview it with a dry run first, then Apply). It reads every row of the dataset, with your data access, and creates one object per row.
  4. Bind the Rakit widget to the object type.

When you save the path again, you get a new dataset. Point the object type's backing dataset at it and run Populate from dataset again.

Converge