Key Features

Build, deploy and scale analytic use cases fast

Modern use case development platform

Joule has been developed to leverage mature and emerging technologies through the application of clean interfaces via the Joule SDK.

Low Code

At its core, Joule adheres to the design principle of delivering a low-code use case platform that fosters rapid development iterations for impactful business outcomes. Packaged with a dedicated use case language, DSL, and a suite of reusable assets, Joule empowers developers to commence building immediately after installation.

Key language elements

  • Flexible event subscriptions and publishing

  • Stream event processing pipeline

  • Custom SQL Metrics definition

  • Extendability through custom components

  • Mainstream product integrations


  name: standardQuoteAnalyticsStream
  enabled: true
  validFrom: 2020-01-01
  validTo: 2025-12-31
  eventTimeType: EVENT_TIME
  sources: [ nasdaq_quotes_stream ]

    sql import:
      schema: standardQuoteAnalyticsStream
          table: quote
          asView: false
          files: ['quotes*.parquet']
            fields: ['symbol']
            unique: false

  processing unit:
    metrics engine:
      runtime policy:
        frequency: 1
        startup delay: 2
        time unit: MINUTES

      foreach metric compute:
            name: BidMovingAverage
            metric key: symbol
            table definition: standardQuoteAnalyticsStream.BidMovingAverage (symbol VARCHAR, avg_bid_min FLOAT, avg_bid_avg FLOAT,avg_bid_max FLOAT)
              SELECT symbol,
              MIN(bid) AS 'avg_bid_min',
              AVG(bid) AS 'avg_bid_avg',
              MAX(bid) AS 'avg_bid_max'
              FROM standardQuoteAnalyticsStream.quote
              ingestTime >= date_trunc('minutes',now() - INTERVAL 2 MINUTES) AND ingestTime <= date_trunc('minutes',now())
              GROUP BY symbol
              ORDER BY 1;
            truncate on start: true
            compaction policy:
              frequency: 8
              time unit: HOURS

      - filter:
          expression: "symbol != 'A'"

    select: "symbol, BidMovingAverage.avg_bid_max;WHERE symbol=${symbol} 'avg_bid_max'"

  group by:
    - symbol

Stream Processing

Event processing is executed through the definition of a processor's pipeline. Events undergo sequential processing utilising a micro-batch methodology, a technique employed to boost processing throughput while optimising the utilisation of underlying hardware capabilities.


Filtering event based using a configurable criteria or a an expression. Example use cases is customer opt-out, missing data elements, out of range etc,.


Enrichment of streaming events with a embedded low-latency data caching solution


Event field tokenisation, encryption, masking, bucketing and redaction


Real-time alerts and event triggers using rule based processing and delta CDC processing

Event Tap

Tap events directly in to an in-memory database to enable on/off line processing


Execute external scripts or defined expression within the use case DSL. using supported scripting languages ( Node.js, JavaScript, Python)


A SQL compliant metrics engine which computes scheduled metrics

Machine Learning

Leverage streaming online predictions to drive insights to action


Streaming analytics using event windows, expressions, scripts and much more


Joule provides three flexible methods to build analytical insights. Each method is describe below.

The integration of streaming analytics serves as a pivotal feature, empowering the evolution of sophisticated use case development, including applications like geospatial analytics for marketing, business analytics, and feature preparation for machine learning predictions.

Key Features

  • Tumbling and sliding windows

  • Standard statistical functions

  • Custom analytic functions

  • Geospatial analytics (Geo Tracker, Geofence occupancy, spatial index)


time window:
  emitting type: tumblingQuoteAnalytics
  aggregate functions:
    FIRST: [ask]
    LAST: [ ask ]
    MIN: [ ask ]
    MAX: [ bid ]
    SUM: [ volume ]
    MEAN: [ volatility ]
    VARIANCE: [ volatility ]
    STDEV: [ volatility ]
    type: tumblingTime
    window size: 5000


Each processing component in Joule furnishes a standard set of metrics, offering users insights into he number of events received, processed, discarded, and failed. Furthermore, with the SQL engine enabled, both raw and processed events are stored, making them queryable and exportable for enhanced analytical capabilities.


Straight out of the box, Joule provides a standardised set of data integrations, facilitating a quick start to data consumption and publication processes.

Flexible Deployment

Joule has been designed to be platform agnostic, offering seamless deployment options whether you choose a local, on-premise, or cloud-based environment. Joule is packaged as a Docker container for simplified deployment configurations or as a standalone binary, providing flexibility to meet diverse deployment needs.


A Java SDK for developers is supplied to extend platform capabilities, enabling the customisation and enhancement of processors and data transports.

Last updated