Skip to main content

Quick start

This guide aims to provide a quick and easy way to get started with RisingWave.

Step 1: Start RisingWave


The following options start RisingWave in standalone mode. In this mode, data will be stored in the file system and metadata will be stored in the embedded SQLite database.

For extensive testing or single-machine deployment, consider starting RisingWave via Docker Compose. For production environments, consider RisingWave Cloud, our fully managed service, or deployment on Kubernetes using the Operator or Helm Chart.


There is a known limitation when using the standalone mode on macOS. Connectors for jdbc, postgresql-cdc, mysql-cdc, elastic-search, and cassandra may not function as expected. This limitation has been addressed in version 1.8.

Script installation

Open a terminal and run the following curl command.

curl | sh


Ensure Docker Desktop is installed and running in your environment.

docker run -it --pull=always -p 4566:4566 -p 5691:5691 risingwavelabs/risingwave:v1.7.0-standalone single_node


Ensure Homebrew is installed, and run the following commands:

brew tap risingwavelabs/risingwave
brew install risingwave@1.7-standalone

From a Web browser

Step 2: Connect to RisingWave

Ensure you have psql installed in your environment. To learn about how to install it, see Install psql without PostgreSQL.

Open a new terminal window and run:

psql -h localhost -p 4566 -d dev -U root

Step 3: Insert some data

RisingWave supports both direct data insertion and streaming data ingestion from sources like message queues and database change streams.

To keep things simple, we'll demonstrate the approach of direct data insertion. Let's create a table and insert some data.

For instance, we can create a table named exam_scores to store information about examination scores.

Create the table
CREATE TABLE exam_scores (
score_id int,
exam_id int,
student_id int,
score real,
exam_date date
Insert five rows of data
INSERT INTO exam_scores (score_id, exam_id, student_id, score, exam_date)
(1, 101, 1001, 85.5, '2022-01-10'),
(2, 101, 1002, 92.0, '2022-01-10'),
(3, 101, 1003, 78.5, '2022-01-10'),
(4, 102, 1001, 91.2, '2022-02-15'),
(5, 102, 1003, 88.9, '2022-02-15');

Step 4: Analyze and query data

As an example, let's create a materialized view to calculate the average score for each examination, and then view the current result of the materialized view.

Create a materialized view
AVG(score) AS average_score,
COUNT(score) AS total_scores
Query the current result
SELECT * FROM average_exam_scores;
exam_id | average_score | total_scores
102 | 90.05000000000001 | 2
101 | 85.33333333333333 | 3
(2 rows)

As new data is received, the average_exam_scores materialized view will be automatically updated. RisingWave performs incremental computations in the background to keep the results up to date.

Now, let's insert five additional rows of data into the exam_scores table and query the latest result from the average_exam_scores materialized view. This will provide us with the updated average score for each examination.

Insert more data
INSERT INTO exam_scores (score_id, exam_id, student_id, score, exam_date)
(11, 101, 1004, 89.5, '2022-05-05'),
(12, 101, 1005, 93.2, '2022-05-05'),
(13, 102, 1004, 87.1, '2022-06-10'),
(14, 102, 1005, 91.7, '2022-06-10'),
(15, 102, 1006, 84.3, '2022-06-10');
Query the latest result
SELECT * FROM average_exam_scores;
exam_id | average_score | total_scores
101 | 87.74 | 5
102 | 88.64000000000001 | 5
(2 rows)

What's next?

Congratulations! You've successfully started RisingWave and conducted some initial data analysis. To explore further, you may want to:

Help us make this doc better!

Was this page helpful?

Happy React is loading...