Lakehouse OLTP Platform

HeliosDB Full plans a lakehouse OLTP platform for teams that want transactions and analytics on one open table format: Apache Iceberg and Delta Lake tables, a unified catalog and analytical queries next to transactional SQL. Lakehouse tables are on the roadmap and not in the current release; today PostgreSQL, MySQL and Oracle clients read and write the shared HeliosDB tables, and a Snowflake-compatible interface is planned too.

Planned: Apache Iceberg and Delta Lake tables and a unified catalog are on the roadmap. Read the documentation.

Problem Being Solved

Root Cause: OLTP and OLAP have historically required different storage formats:

  • Row vs Columnar: OLTP needs row-oriented for point lookups; OLAP needs columnar for scans
  • Different File Formats: PostgreSQL uses heap files; warehouses use Parquet/ORC
  • No Shared Standard: Proprietary formats prevent direct querying
  • ETL Required: Must transform and copy data between systems

HeliosDB Solution: Unified Lakehouse

Key Capabilities

2. Real-Time Analytics (Zero ETL)

-- Same table, analytical query (immediate, no ETL)
SELECT
    DATE_TRUNC('hour', order_date) AS hour,
    COUNT(*) AS order_count,
    SUM(total_amount) AS revenue
FROM orders
WHERE order_date >= CURRENT_DATE
GROUP BY 1
ORDER BY 1;
-- Data is current to the second, not hours/days old

-- Complex analytics on live data
WITH hourly_trends AS (
    SELECT
        DATE_TRUNC('hour', order_date) AS hour,
        customer_segment,
        SUM(total_amount) AS revenue,
        COUNT(DISTINCT customer_id) AS unique_customers
    FROM orders o
    JOIN customers c ON o.customer_id = c.id
    WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
    GROUP BY 1, 2
)
SELECT * FROM hourly_trends
WHERE revenue > (SELECT AVG(revenue) FROM hourly_trends)
ORDER BY revenue DESC;

3. Time Travel Queries

-- Query historical state
SELECT * FROM orders
FOR SYSTEM_TIME AS OF '2025-11-01 00:00:00';

-- Compare current vs historical
SELECT
    'current' AS snapshot,
    COUNT(*) AS order_count,
    SUM(total_amount) AS revenue
FROM orders
WHERE order_date >= '2025-11-01'
UNION ALL
SELECT
    'week_ago' AS snapshot,
    COUNT(*) AS order_count,
    SUM(total_amount) AS revenue
FROM orders
FOR SYSTEM_TIME AS OF CURRENT_TIMESTAMP - INTERVAL '7 days'
WHERE order_date >= '2025-11-01';

-- Rollback to previous state (disaster recovery)
ALTER TABLE orders REVERT TO SNAPSHOT 'snapshot_20251101';

4. Open Format Interoperability

-- Query from Spark (same Iceberg tables)
spark.read.format("iceberg").load("heliosdb.orders")

-- Query from Trino
SELECT * FROM iceberg.heliosdb.orders WHERE ...

-- Query from Flink (streaming)
CREATE TABLE orders_stream WITH ('connector' = 'iceberg', ...)

-- Zero lock-in: data is portable to any Iceberg-compatible tool

5. Delta Lake Support

-- Create Delta table
CREATE TABLE events (
    event_id BIGINT,
    event_type VARCHAR(50),
    event_data JSONB,
    event_time TIMESTAMP
) USING DELTA
WITH (
    'delta.enableChangeDataFeed' = 'true'
);

-- Z-ordering for query optimization
OPTIMIZE events ZORDER BY (event_type, event_time);

-- Change data feed for downstream consumers
SELECT * FROM table_changes('events', 1, 100);

Concrete Examples

Example 1: E-Commerce Real-Time Analytics

After HeliosDB:

-- Single database for OLTP and OLAP
CREATE TABLE orders (
    order_id BIGINT PRIMARY KEY,
    customer_id BIGINT,
    order_date TIMESTAMP,
    status VARCHAR(20),
    total_amount DECIMAL(10,2),
    items JSONB
) USING ICEBERG;

-- Real-time dashboard query
CREATE MATERIALIZED VIEW realtime_metrics AS
SELECT
    DATE_TRUNC('minute', order_date) AS minute,
    COUNT(*) AS orders,
    SUM(total_amount) AS revenue,
    COUNT(DISTINCT customer_id) AS unique_customers
FROM orders
WHERE order_date >= CURRENT_DATE
GROUP BY 1;

-- Refresh every 10 seconds
ALTER MATERIALIZED VIEW realtime_metrics
SET (refresh_interval = '10 seconds');

Example 2: Financial Services Trade Analytics

Challenge: Real-time trade surveillance and compliance reporting

-- Trades table on Iceberg with OLTP performance
CREATE TABLE trades (
    trade_id BIGINT PRIMARY KEY,
    account_id BIGINT,
    symbol VARCHAR(10),
    side VARCHAR(4),
    quantity INT,
    price DECIMAL(12,4),
    trade_time TIMESTAMP,
    execution_venue VARCHAR(20)
) USING ICEBERG
WITH (
    partition = 'DAYS(trade_time)',
    oltp_optimized = true
);

-- Real-time trade surveillance (runs continuously)
CREATE CONTINUOUS QUERY suspicious_activity AS
SELECT
    account_id,
    symbol,
    COUNT(*) AS trade_count,
    SUM(quantity * price) AS total_value,
    MAX(trade_time) - MIN(trade_time) AS time_window
FROM trades
WHERE trade_time >= CURRENT_TIMESTAMP - INTERVAL '5 minutes'
GROUP BY account_id, symbol
HAVING COUNT(*) > 50 OR SUM(quantity * price) > 1000000;

-- End-of-day compliance report (same table, analytical query)
SELECT
    execution_venue,
    symbol,
    COUNT(*) AS trade_count,
    SUM(quantity) AS total_volume,
    AVG(price) AS avg_price,
    SUM(quantity * price) AS notional_value
FROM trades
WHERE DATE(trade_time) = CURRENT_DATE
GROUP BY 1, 2
ORDER BY notional_value DESC;
-- Executes on columnar Parquet in seconds

Example 3: IoT Data Platform

Company Profile: Manufacturing company with 10,000 sensors

Challenge: Store high-volume sensor data with real-time and historical analytics

-- Sensor data on Iceberg (optimized for time-series)
CREATE TABLE sensor_readings (
    sensor_id INT,
    reading_time TIMESTAMP,
    temperature FLOAT,
    pressure FLOAT,
    vibration FLOAT,
    status VARCHAR(20),
    PRIMARY KEY (sensor_id, reading_time)
) USING ICEBERG
WITH (
    partition = 'HOURS(reading_time)',
    sort_order = 'sensor_id, reading_time',
    target_file_size = '256MB'
);

COPY sensor_readings FROM STDIN WITH (FORMAT binary);
-- Streaming insert from Kafka
CREATE SUBSCRIPTION sensor_stream
CONNECTION 'kafka://...'
PUBLICATION sensor_events;

-- Real-time anomaly detection
CREATE CONTINUOUS QUERY anomalies AS
SELECT
    sensor_id,
    reading_time,
    temperature,
    AVG(temperature) OVER w AS avg_temp,
    STDDEV(temperature) OVER w AS stddev_temp
FROM sensor_readings
WINDOW w AS (
    PARTITION BY sensor_id
    ORDER BY reading_time
    RANGE BETWEEN INTERVAL '1 hour' PRECEDING AND CURRENT ROW
)
WHERE ABS(temperature - AVG(temperature) OVER w) > 3 * STDDEV(temperature) OVER w;

-- Historical analysis (1 year of data, 50B rows)
SELECT
    sensor_id,
    DATE_TRUNC('day', reading_time) AS day,
    AVG(temperature) AS avg_temp,
    MAX(temperature) AS max_temp,
    MIN(temperature) AS min_temp
FROM sensor_readings
WHERE reading_time >= '2025-01-01'
GROUP BY 1, 2
ORDER BY 1, 2;
-- Would take hours on traditional OLTP database

Storage economics:
- Raw data: 50TB

Example 4: Healthcare Data Lakehouse

Company Profile: Hospital system with EHR integration needs

Challenge: Combine operational EHR data with analytical research queries

-- Patient encounters table (OLTP + OLAP)
CREATE TABLE encounters (
    encounter_id BIGINT PRIMARY KEY,
    patient_id BIGINT,
    provider_id BIGINT,
    encounter_date TIMESTAMP,
    encounter_type VARCHAR(50),
    diagnosis_codes ARRAY<VARCHAR(10)>,
    procedure_codes ARRAY<VARCHAR(10)>,
    notes TEXT
) USING ICEBERG
WITH (
    partition = 'MONTHS(encounter_date)',
    oltp_optimized = true
);

-- Real-time EHR operations
INSERT INTO encounters VALUES (...);
UPDATE encounters SET notes = ... WHERE encounter_id = ...;

-- Research query: Disease cohort analysis
SELECT
    diagnosis_codes[1] AS primary_diagnosis,
    COUNT(DISTINCT patient_id) AS patient_count,
    AVG(DATEDIFF(discharge_date, admission_date)) AS avg_los
FROM encounters
WHERE encounter_date >= '2020-01-01'
  AND 'I21' = ANY(diagnosis_codes)  -- Heart attack
GROUP BY 1
ORDER BY patient_count DESC;
-- Executes on columnar data, HIPAA audit logged

-- Time travel for regulatory audit
SELECT * FROM encounters
FOR SYSTEM_TIME AS OF '2025-06-30 23:59:59'
WHERE patient_id = 12345;
-- Exact state at audit date

Example 5: Multi-Cloud Data Architecture

Company Profile: Enterprise with AWS, Azure, and on-premise data centers

Challenge: Unified analytics across cloud boundaries

-- Primary on AWS
CREATE TABLE aws_orders (...)
USING ICEBERG
LOCATION 's3://data-lake-aws/orders';

-- Secondary on Azure
CREATE TABLE azure_orders (...)
USING ICEBERG
LOCATION 'abfs://data-lake-azure/orders';

-- Cross-cloud federation (no data movement)
SELECT
    'AWS' AS source,
    COUNT(*) AS orders,
    SUM(total) AS revenue
FROM aws_orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days'
UNION ALL
SELECT
    'Azure' AS source,
    COUNT(*) AS orders,
    SUM(total) AS revenue
FROM azure_orders
WHERE order_date >= CURRENT_DATE - INTERVAL '30 days';
-- Query pushdown to each cloud
-- Only aggregated results transferred

-- Unified catalog across clouds
SELECT
    table_catalog,
    table_schema,
    table_name,
    row_count,
    size_bytes
FROM heliosdb_information_schema.tables
WHERE table_format = 'ICEBERG';
-- See all Iceberg tables across all clouds

Implementation Roadmap

Phase 1: Assessment (Week 1-2)

Analysis:
├── Inventory current OLTP databases
├── Analyze Snowflake/warehouse workloads
├── Identify ETL pipelines
├── Calculate potential savings
└── Select pilot workload

Deliverables:
- Current state architecture diagram
- Target state architecture
- ROI analysis
- Migration plan

Phase 2: Pilot (Week 3-6)

Implementation:
├── Deploy HeliosDB cluster
├── Create Iceberg tables
├── Migrate pilot OLTP workload
├── Connect BI tools
└── Validate performance

Testing:
├── OLTP latency benchmarks
├── OLAP query performance
├── Data consistency validation
└── Failover testing

Phase 3: Migration (Month 2-3)

Execution:
├── CDC-based migration (zero downtime)
├── Query compatibility validation
├── BI dashboard migration
├── ETL pipeline retirement
└── Production cutover

Post-Migration:
├── Performance monitoring
├── Cost tracking
├── Team training
└── Documentation

Conclusion

HeliosDB's lakehouse OLTP platform eliminates the artificial boundary between operational and analytical databases.

  • Eliminate ETL: Zero data pipelines, zero latency
  • Enable Real-Time: Analytics on live operational data

Performance depends on workload and hardware. Published figures are measured on representative fixtures; see the benchmarks page and reproduce them on your own workload.