#1
This guide shows how to use partitioning and sharding in ClickHouse with Spring Boot for scalable and efficient data management.

1. Create Partitioned Table

In ClickHouse, partitioning splits data by key:
CREATE TABLE orders (
    id UInt64,
    user_id UInt32,
    amount Float32,
    created Date
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(created)
ORDER BY (id);
This keeps data grouped by month.

2. Insert Data from Spring Boot

Use JdbcTemplate or Spring Data JDBC:
jdbcTemplate.update(
    "INSERT INTO orders (id, user_id, amount, created) VALUES (?, ?, ?, ?)",
    id, userId, amount, LocalDate.now()
);

3. Sharding Across Nodes

Sharding distributes data across cluster nodes. Example distributed table:
CREATE TABLE orders_dist AS orders
ENGINE = Distributed('cluster1', 'default', 'orders', rand());

4. Query with Spring Boot

Run queries as usual, ClickHouse will handle partitions and shards:
List<Map<String, Object>> results =
    jdbcTemplate.queryForList("SELECT sum(amount) FROM orders_dist WHERE created >= '2025-01-01'");

5. Benefits

  • Faster queries with partition pruning
  • Data spread across nodes for scalability
  • Easy integration with Spring Boot batch inserts

image quote pre code