Behavioral Analytics
Application Databases
3rd-Party Data
Incremental Engine
view: raw_users
view: dim_users
Continually updated
SQL Materialized Views
BI Tools
Operational Dashboards
User-Facing Apps

A Cloud Database Purpose-Built for
Data Warehouse Offload

“Our data team was serving real-time delivery status and location analytics to customers with two weeks of work and minimal ongoing maintenance.”

Clayton Von Hovel
Clayton Von Hovel Data Engineer, Onward Delivery

Operate your business in real-time for less

Dashboards and Business Intelligence

User-Facing Analytics

Real-time data quality tests

Operational and IoT Reporting

Learn how to get started with
Materialize

Why Materialize?

Modern Data Applications need Modern Solutions

undefined

Traditional Warehouses: Too Slow

undefined

Stream Processors: Too Complicated

Materialize packages the speed of stream processors in a familiar database abstraction.

Streaming Engine

Read: What is a Streaming Database?  →
undefined

PostgreSQL Serving Layer

Read: Materialize Postgres Compatibility Explained  →

Managed in standard SQL

Incrementally Maintained Views

Write complex SQL transformations as materialized views that efficiently update themselves as inputs change.

Learn More

Sliding Windows

Chevron Down

Write queries that filter to a window of time anchored to the present, Materialize will update results as time advances.

Learn More

SQL Alerting

Chevron Down

Write alerts as SQL queries with filters and subscribe to new rows as they appear.

Learn More
incremental.sql
CREATE MATERIALIZED VIEW my_view AS
	SELECT userid, COUNT(api.id), COUNT(pageviews.id)
	FROM users
	JOIN pageviews on users.id = pageviews.userid
	JOIN api ON users.id = api.userId
	GROUP BY userid;
userID api_calls pageviews
VPLaKV 400 20
MN37Mt 60 9
1fT4KY 72 42
sT4QY 10 342

Incrementally Maintained Views

Write complex SQL transformations as materialized views that efficiently update themselves as inputs change.

Learn More
incremental.sql
CREATE MATERIALIZED VIEW my_view AS
	SELECT userid, COUNT(api.id), COUNT(pageviews.id)
	FROM users
	JOIN pageviews on users.id = pageviews.userid
	JOIN api ON users.id = api.userId
	GROUP BY userid;
userID api_calls pageviews
VPLaKV 400 20
MN37Mt 60 9
1fT4KY 72 42
sT4QY 10 342

Sliding Windows

Write queries that filter to a window of time anchored to the present, Materialize will update results as time advances.

Learn More
sliding.sql
CREATE MATERIALIZED VIEW my_window AS
	SELECT date_trunc('minute', received_at),
	COUNT(*) as order_ct, SUM(amount) as revenue
	FROM orders
	WHERE mz_now() < received_at + interval '5 minutes'
	GROUP BY 1;
minute order_ct revenue

SQL Alerting

Write alerts as SQL queries with filters and subscribe to new rows as they appear.

Learn More
alerting.sql
SELECT userID, email, MAX(orders.id) as last_order
  FROM users
  JOIN orders ON orders.userID = users.id
  GROUP BY userId, email
  -- Use a filter to surface users with a high % of fraud
  HAVING SUM(is_fraud) / COUNT(orders.id)::FLOAT > 0.5;
userID email last_order
REOtIb 13/12/2022
Y5KBE8 9/12/2022
Wj7JQ0 13/12/2022
tPCQ0 13/11/2022
Checkmark
Checkmark
Checkmark
Checkmark

Streaming Inputs

Built for JOINs

Active Replication

Event-Driven Primitives

Secure and Compliant

The Ease of a Data Warehouse with the Speed of Streaming

“My warehouse is too slow - but real time is too expensive”

“Our analytics are too join-heavy to move to real time”

“We don't want to take on the operational burden of Kafka”

“This is high-stakes data, we can't show incorrect results.”

“We’d like to keep our existing visualization tools”

“We already move Kafka data into our data warehouse”

More Use Cases

Automation and Alerting

Automation and Alerting

Real-time Fraud Detection

Real-time Fraud Detection

Segmentation and Personalization

Segmentation and Personalization

ML in Production

ML in Production

Try Materialize Free