Joule
  • Welcome to Joule's Docs
  • Why Joule?
    • Joule capabilities
  • What is Joule?
    • Key features
    • The tech stack
  • Use case enablement
    • Use case building framework
  • Concepts
    • Core concepts
    • Low code development
    • Unified execution engine
    • Batch and stream processing
    • Continuous metrics
    • Key Joule data types
      • StreamEvent object
      • Contextual data
      • GeoNode
  • Tutorials
    • Getting started
    • Build your first use case
    • Stream sliding window quote analytics
    • Advanced tutorials
      • Custom missing value processor
      • Stateless Bollinger band analytics
      • IoT device control
  • FAQ
  • Glossary
  • Components
    • Pipelines
      • Use case anatomy
      • Data priming
        • Types of import
      • Processing unit
      • Group by
      • Emit computed events
      • Telemetry auditing
    • Processors
      • Common attributes
      • Filters
        • By type
        • By expression
        • Send on delta
        • Remove attributes
        • Drop all events
      • Enrichment
        • Key concepts
          • Anatomy of enrichment DSL
          • Banking example
        • Metrics
        • Dynamic contextual data
          • Caching architecture
        • Static contextual data
      • Transformation
        • Field Tokeniser
        • Obfuscation
          • Encryption
          • Masking
          • Bucketing
          • Redaction
      • Triggers
        • Change Data Capture
        • Business rules
      • Stream join
        • Inner stream joins
        • Outer stream joins
        • Join attributes & policy
      • Event tap
        • Anatomy of a Tap
        • SQL Queries
    • Analytics
      • Analytic tools
        • User defined analytics
          • Streaming analytics example
          • User defined analytics
          • User defined scripts
          • User defined functions
            • Average function library
        • Window analytics
          • Tumbling window
          • Sliding window
          • Aggregate functions
        • Analytic functions
          • Stateful
            • Exponential moving average
            • Rolling Sum
          • Stateless
            • Normalisation
              • Absolute max
              • Min max
              • Standardisation
              • Mean
              • Log
              • Z-Score
            • Scaling
              • Unit scale
              • Robust Scale
            • Statistics
              • Statistic summaries
              • Weighted moving average
              • Simple moving average
              • Count
            • General
              • Euclidean
        • Advanced analytics
          • Geospatial
            • Entity geo tracker
            • Geofence occupancy trigger
            • Geo search
            • IP address resolver
            • Reverse geocoding
            • Spatial Index
          • HyperLogLog
          • Distinct counter
      • ML inferencing
        • Feature engineering
          • Scripting
          • Scaling
          • Transform
        • Online predictive analytics
        • Model audit
        • Model management
      • Metrics engine
        • Create metrics
        • Apply metrics
        • Manage metrics
        • Priming metrics
    • Contextual data
      • Architecture
      • Configuration
      • MinIO S3
      • Apache Geode
    • Connectors
      • Sources
        • Kafka
          • Ingestion
        • RabbitMQ
          • Further RabbitMQ configurations
        • MQTT
          • Topic wildcards
          • Session management
          • Last Will and Testament
        • Rest endpoints
        • MinIO S3
        • File watcher
      • Sinks
        • Kafka
        • RabbitMQ
          • Further configurations
        • MQTT
          • Persistent messaging
          • Last Will and Testament
        • SQL databases
        • InfluxDB
        • MongoDB
        • Geode
        • WebSocket endpoint
        • MinIO S3
        • File transport
        • Slack
        • Email
      • Serialisers
        • Serialisation
          • Custom transform example
          • Formatters
        • Deserialisers
          • Custom parsing example
    • Observability
      • Enabling JMX for Joule
      • Meters
      • Metrics API
  • DEVELOPER GUIDES
    • Setting up developer environment
      • Environment setup
      • Build and deploy
      • Install Joule
        • Install Docker demo environment
        • Install with Docker
        • Install from source
        • Install Joule examples
    • Joulectl CLI
    • API Endpoints
      • Mangement API
        • Use case
        • Pipelines
        • Data connectors
        • Contextual data
      • Data access API
        • Query
        • Upload
        • WebSocket
      • SQL support
    • Builder SDK
      • Connector API
        • Sources
          • StreamEventParser API
        • Sinks
          • CustomTransformer API
      • Processor API
      • Analytics API
        • Create custom metrics
        • Define analytics
        • Windows API
        • SQL queries
      • Transformation API
        • Obfuscation API
        • FieldTokenizer API
      • File processing
      • Data types
        • StreamEvent
        • ReferenceDataObject
        • GeoNode
    • System configuration
      • System properties
  • Deployment strategies
    • Deployment Overview
    • Single Node
    • Cluster
    • GuardianDB
    • Packaging
      • Containers
      • Bare metal
  • Product updates
    • Public Roadmap
    • Release Notes
      • v1.2.0 Join Streams with stateful analytics
      • v1.1.0 Streaming analytics enhancements
      • v1.0.4 Predictive stream processing
      • v1.0.3 Contextual SQL based metrics
    • Change history
Powered by GitBook
On this page
  • Overview
  • SQLQueryInterface APIs
  • Package
  • Examples
  • Database Ops
  • Table Management
  • Query Processing
  • Data Structures
  • SQLQueryResults
  • TableMetaData

Was this helpful?

  1. DEVELOPER GUIDES
  2. Builder SDK
  3. Analytics API

SQL queries

Leverage the power of ANSI SQL within custom processors using the in-memory database

Overview

Joule embeds DuckDB, an in-memory database, in to the runtime process. The solution is ideal for supporting custom processor logic using various methods such as:

  • Hosting and accessing custom reference data

  • Scratchpad for stateful processing

  • Ad-hoc custom complex queries

  • Capture and exporting streaming events

SQLQueryInterface APIs

The below provides the required API documentation to leverage the internal in-memory database for your use cases.

Package

com.fractalworks.streams.sdk.analytics.sql.SQLQueryInterface

Examples

The below is a uses the raw internal database connection via a API call.

try (Statement statement = SQLQueryInterface.getConnection().createStatement()) {
    statement.execute(query);
} catch (SQLException e) {
    throw new FailedSQLProcessingException(String.format("Failed to execute query [%s]", query), e);
}

This example registers a query, executes and returns an unpacked resultset and then unregisters the query.

SQLQueryInterface.registerQuery("duckDBSetting","SELECT * FROM duckdb_settings();");
List<SQLQueryResult> results = SQLQueryInterface.executeSelectQuery("duckDBSetting", null);
SQLQueryInterface.unregisterQuery("duckDBSetting");

Database Ops

DuckDBConnection getConnection() throws SQLException

Return - In-process database connection

Exception - Thrown when a connection cannot be made to the internal database


void createSchema(final String schemaName) throws FailedSQLProcessingException

Description - Create a database schema namespace

Exception - Thrown when the schema cannot be created due to an internal database issue


Table Management

void createTable(final String tableDefinition) throws FailedSQLProcessingException

Description - Create a database table, if it does not exist, using the provided table SQL definition.

Exception - Thrown when table failed to be created

Parameters

Parameter
Description
Type

tableDefinition

Table SQL definition

String


boolean createIndex(final String schema, final String table, String[] fields, boolean unique)

Description - Create a unique index on table. If the index already exists it will be dropped and recreated.

Return - True if index created otherwise false

Exception - Thrown when index failed to be created

Parameters

Parameter
Description
Type

schema

Schema where table exists

String

table

Name of database table

String

fields

List of fields to create index upon

String[]

unique

Flag to indicate if a unique index is to be created. True for unique indexes false otherwise

Boolean


TableMetaData getTableMetaData(final String tablename) throws FailedSQLProcessingException

Exception - Thrown due to an internal database issue

Parameters

Parameter
Description
Type

table

Name of the table

String


void dropTable(final String table) throws FailedSQLProcessingException

Description - Drop the table from the database.

Exception - Thrown when table failed to be dropped

Parameters

Parameter
Description
Type

table

Name of the table to be dropped

String


void deleteTable(final String table, final String criteria) throws FailedSQLProcessingException

Description - Delete table records using the passed criteria

Exception - Thrown when failed to delete table

Parameters

Parameter
Description
Type

queryName

Name of the query to be executed

String

params

Array of parameters to be passed in to query

Object[]


Query Processing

void registerQuery(String queryName, String query) throws DuplicateQueryException

Description - Register a query in to the internal SQL engine. The query will be cached to improve runtime performance.

Exception - Thrown when the query name has already been used

Parameters

Parameter
Description
Type

queryName

Name of query to be registered

String

query

Well formed SQL query

String


List<SQLQueryResult> executeSelectQuery(String queryName, Object[] params) throws SQLException

Description - Execute a registered query with the passed parameters and return a list of query results

Exception - Thrown when a query execution fails

Parameters

Parameter
Description
Type

queryName

Name of the query to be executed

String

params

Array of parameters to be passed in to query

Object[]


Map<String, String> getAvailableQueries()

Description - Get a list of available queries and the associated query SQL

Response - Map query names to associated SQL


boolean unregisterQuery(String queryName)

Description - Unregister a cached query

Response - True query unregistered false otherwise

Parameters

Parameter
Description
Type

queryName

Name of the query to be unregistered

String


Data Structures

We have kept the number of data structures to the minimum and as simple as possible.

SQLQueryResults

This class is a convenience class to hold the query results as a HashMap<String,Object>

TableMetaData

This class provides a DuckDB specific unwrapping of the metadata for a specific database table.

PreviousWindows APINextTransformation API

Last updated 6 months ago

Was this helpful?

Description - Get an internal database connection. This will provide you the ability to interact directly using your own code. Visit the on how to leverage their features.

Description - Get table metadata, see section for class details

Response - List of SQLQueryResults, see for more information

DuckDB JDBC documentation
TableMetaData
SQLQueryResults