Skip to content

Latest commit

 

History

History

clickhouse-jdbc

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

ClickHouse JDBC driver

THe official JDBC driver for ClickHouse

Documentation

See the ClickHouse website for the full documentation entry.

Examples

For more example please check here.

Upgrade path

to 0.3.2+

Please refer to cheatsheet below to upgrade JDBC driver to 0.3.2+.

# Item <= 0.3.1-patch >= 0.3.2
1 pom.xml
<dependency>
    <groupId>ru.yandex.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.3.1-patch</version>
    <classifier>shaded</classifier>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.3.2-patch11</version>
    <classifier>all</classifier>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
2 driver class ru.yandex.clickhouse.ClickHouseDriver com.clickhouse.jdbc.ClickHouseDriver
3 connection string
jdbc:clickhouse://[user[:password]@]host:port[/database][?parameters]
jdbc:(ch|clickhouse)[:protocol]://endpoint[,endpoint][/database][?parameters][#tags]
endpoint: [protocol://]host[:port][/database][?parameters][#tags]
protocol: (grpc|grpcs|http|https|tcp|tcps)
4 custom settings
String jdbcUrl = "jdbc:clickhouse://localhost:8123/default?socket_timeout=6000000"
    // custom server settings
    + "&max_bytes_before_external_group_by=16000000000"
    + "&optimize_aggregation_in_order=0"
    + "&join_default_strictness=ANY"
    + "&join_algorithm=auto"
    + "&max_memory_usage=20000000000"; 
String jdbcUrl = "jdbc:clickhouse://localhost/default?socket_timeout=6000000"
    // or properties.setProperty("custom_settings", "a=1,b=2,c=3")
    + "&custom_settings="
    // url encoded settings separated by comma
    + "max_bytes_before_external_group_by%3D16000000000%2C"
    + "optimize_aggregation_in_order%3D0%2C"
    + "join_default_strictness%3DANY%2C"
    + "join_algorithm%3Dauto%2C"
    + "max_memory_usage%3D20000000000"; 
5 load balancing
String connString = "jdbc:clickhouse://server1:8123,server2:8123,server3:8123/database";
BalancedClickhouseDataSource balancedDs = new BalancedClickhouseDataSource(
    connString).scheduleActualization(5000, TimeUnit.MILLISECONDS);
ClickHouseConnection conn = balancedDs.getConnection("default", "");
String connString = "jdbc:ch://server1,server2,server3/database"
    + "?load_balancing_policy=random&health_check_interval=5000&failover=2";
ClickHouseDataSource ds = new ClickHouseDataSource(connString);
ClickHouseConnection conn = ds.getConnection("default", "");
6 DateTime
try (PreparedStatement ps = conn.preparedStatement("insert into mytable(start_datetime, string_value) values(?,?)") {
    ps.setObject(1, LocalDateTime.now());
    ps.setString(2, "value");
    ps.executeUpdate();
}
try (PreparedStatement ps = conn.preparedStatement("insert into mytable(start_datetime, string_value) values(?,?)") {
    // resolution of DateTime32 or DateTime without scale is 1 second
    ps.setObject(1, LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS));
    ps.setString(2, "value");
    ps.executeUpdate();
}
7 extended API
ClickHouseStatement sth = connection.createStatement();
sth.write().send("INSERT INTO test.writer", new ClickHouseStreamCallback() {
    @Override
    public void writeTo(ClickHouseRowBinaryStream stream) throws IOException {
        for (int i = 0; i < 10; i++) {
            stream.writeInt32(i);
            stream.writeString("Name " + i);
        }
    }
}, ClickHouseFormat.RowBinary); // RowBinary or Native are supported
// 0.3.2
Statement sth = connection.createStatement();
sth.unwrap(ClickHouseRequest.class).write().table("test.writer")
    .format(ClickHouseFormat.RowBinary).data(out -> {
    for (int i = 0; i < 10; i++) {
        // write data into the piped stream in current thread
        BinaryStreamUtils.writeInt32(out, i);
        BinaryStreamUtils.writeString(out, "Name " + i);
    }
}).sendAndWait();

// since 0.4 PreparedStatement ps = connection.preparedStatement("insert into test.writer format RowBinary"); ps.setObject(new ClickHouseWriter() { @Override public void write(ClickHouseOutputStream out) throws IOException { for (int i = 0; i < 10; i++) { // write data into the piped stream in current thread BinaryStreamUtils.writeInt32(out, i); BinaryStreamUtils.writeString(out, "Name " + i); } } }); // ClickHouseWriter will be executed in a separate thread ps.executeUpdate();