同步操作将从 流云细水/clickhouse-jdbc 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Java client and JDBC driver for ClickHouse. Java client is async, lightweight, and low-overhead library for ClickHouse; while JDBC driver is built on top of the Java client with more dependencies and extensions for JDBC-compliance. Java 8 or higher is required to use Java client(clickhouse-client) and/or JDBC driver(clickhouse-jdbc). In addition, starting from 0.3.2, JDBC driver only works with ClickHouse 20.7+, so please consider to either upgrade server to one of active releases or downgrade the driver to 0.3.1-patch(not recommended).
IMPORTANT
Maven groupId ru.yandex.clickhouse
and legacy JDBC driver ru.yandex.clickhouse.ClickHouseDriver
have been deprecated and no longer receive updates.
Please use new groupId com.clickhouse
and driver com.clickhouse.jdbc.ClickHouseDriver
instead. It's highly recommended to upgrade to 0.3.2+ now for improved performance and stability.
Note: in general, the new driver(v0.3.2+) is a few times faster with less memory usage. More information can be found at here.
Category | Feature | Supported | Remark |
---|---|---|---|
API | JDBC | ||
R2DBC | will be supported in 0.3.3 | ||
GraphQL | |||
Protocol | HTTP | recommended, defaults to java.net.HttpURLConnection and can be changed to java.net.http.HttpClient (less stable) |
|
gRPC | still experimental, works with 22.3+, known to has issue when using LZ4 compression | ||
TCP/Native |
clickhouse-cli-client (wrapper of ClickHouse native command-line client) was added in 0.3.2-patch10, clickhouse-tcp-client will be available in 0.3.3 |
||
Local/File |
clickhouse-cli-client will be enhanced to support clickhouse-local
|
||
Compatibility | Server < 20.7 | use 0.3.1-patch(or 0.2.6 if you're stuck with JDK 7) | |
Server >= 20.7 | use 0.3.2 or above. All active releases are supported. | ||
Compression | gzip | ||
lz4 | default | ||
zstd | |||
Data Format | RowBinary |
RowBinaryWithNamesAndTypes for query and RowBinary for insertion |
|
TabSeparated | Does not support as many data types as RowBinary | ||
Data Type | AggregatedFunction | limited to groupBitmap
|
|
Array(*) | |||
Bool | |||
Date* | |||
DateTime* | |||
Decimal* |
SET output_format_decimal_trailing_zeros=1 in 21.9+ for consistency |
||
Enum* | can be treated as both string and integer | ||
Geo Types | Point, Ring, Polygon, and MultiPolygon | ||
Int*, UInt* | UInt64 is mapped to long
|
||
IPv* | |||
Map(*) | |||
Nested(*) | |||
Object('JSON') | supported since 0.3.2-patch8 | ||
SimpleAggregateFunction | |||
*String | |||
Tuple(*) | |||
UUID | |||
High Availability | Load Balancing | supported since 0.3.2-patch10 | |
Failover | supported since 0.3.2-patch10 | ||
Transaction | Transaction | supported since 0.3.2-patch11, use ClickHouse 22.7+ for native implicit transaction support | |
Savepoint | |||
XAConnection |
The library can be downloaded from both Github Releases and Maven Central. Development snapshots are available on Sonatype OSSRH.
<repositories>
<repository>
<id>ossrh</id>
<name>Sonatype OSSRH</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependency>
<groupId>com.clickhouse</groupId>
<!-- or clickhouse-grpc-client if you prefer gRPC -->
<artifactId>clickhouse-http-client</artifactId>
<version>0.3.2-patch11</version>
</dependency>
// endpoint: protocol://host[:port][/database][?param[=value][¶m[=value]][#tag[,tag]]
ClickHouseNode endpoint = ClickHouseNode.of("https://localhost"); // http://localhost:8443?ssl=true&sslmode=NONE
// endpoints: [defaultProtocol://]endpoint[,endpoint][/defaultDatabase][?defaultParameters][#defaultTags]
ClickHouseNodes endpoints = ClickHouseNodes.of("http://(https://explorer@play.clickhouse.com:443),localhost,"
+ "(tcp://localhost?!auto_discovery#experimental),(grpc://localhost#experimental)?failover=3#test")
try (ClickHouseClient client = ClickHouseClient.newInstance(ClickHouseProtocol.HTTP);
ClickHouseResponse response = client.connect(endpoint) // or client.connect(endpoints)
// you'll have to parse response manually if using a different format
.format(ClickHouseFormat.RowBinaryWithNamesAndTypes)
.query("select * from numbers(:limit)")
.params(1000).executeAndWait()) {
// or response.stream() if you prefer stream API
for (ClickHouseRecord r : response.records()) {
int num = r.getValue(0).asInteger();
// type conversion
String str = r.getValue(0).asString();
LocalDate date = r.getValue(0).asDate();
}
ClickHouseResponseSummary summary = response.getSummary();
long totalRows = summary.getTotalRowsToRead();
}
<dependency>
<!-- please stop using ru.yandex.clickhouse as it's been deprecated -->
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.2-patch11</version>
<!-- use uber jar with all dependencies included, change classifier to http for smaller jar -->
<classifier>all</classifier>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
// jdbc:(ch|clickhouse):[defaultProtocol://]endpoint[,endpoint][/defaultDatabase][?defaultParameters][#defaultTags]
String url = "jdbc:ch:https://play.clickhouse.com:443";
Properties properties = new Properties();
properties.setProperty("user", "explorer");
properties.setProperty("password", "");
// optional properties
properties.setProperty("client_name", "Agent #1");
...
ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);
try (Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("show databases")) {
...
}
More examples can be found at here.
Use mvn -DskipITs clean verify
to compile and generate packages if you're using JDK 8. To create a multi-release jar (see JEP-238), please use JDK 11+ with ~/.m2/toolchains.xml
like below, and run mvn -Drelease -DskipITs clean verify
instead.
<?xml version="1.0" encoding="UTF8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
</provides>
<configuration>
<jdkHome>/usr/lib/jvm/java-11-openjdk</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
</provides>
<configuration>
<jdkHome>/usr/lib/jvm/java-17-openjdk</jdkHome>
</configuration>
</toolchain>
</toolchains>
By default, docker is required to run integration test. Docker image(defaults to clickhouse/clickhouse-server
) will be pulled from Internet, and containers will be created automatically by testcontainers before testing. To test against specific version of ClickHouse, you can pass parameter like -DclickhouseVersion=22.3
to Maven.
In the case you don't want to use docker and/or prefer to test against an existing server, please follow instructions below:
default
and no password), which has both DDL and DML privileges/usr/bin/clickhouse
) is available in PATH, as it's required to test clickhouse-cli-client
test.properties
under either ~/.clickhouse
or src/test/resources
of your project, with content like below:
clickhouseServer=x.x.x.x
# below properties are only useful for test containers
#clickhouseVersion=latest
#clickhouseTimezone=UTC
#clickhouseImage=clickhouse/clickhouse-server
#additionalPackages=
To benchmark JDBC drivers:
cd clickhouse-benchmark
mvn -Drelease clean package
# single thread mode
java -DdbHost=localhost -jar target/benchmarks.jar -t 1 \
-p client=clickhouse-jdbc -p connection=reuse \
-p statement=prepared Query.selectInt8
It's time consuming to run all benchmarks against all drivers using different parameters for comparison. If you just need some numbers to understand performance, please refer to this(still have plenty of room to improve according to ranking at here).
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。