Skip to content

Instantly share code, notes, and snippets.

@den-crane
Created April 27, 2023 12:17
Show Gist options
  • Save den-crane/fd8e0c187fc6f7ee6037d254fb99667b to your computer and use it in GitHub Desktop.
Save den-crane/fd8e0c187fc6f7ee6037d254fb99667b to your computer and use it in GitHub Desktop.
ingest data from file using clickhouse-http-java-client

Test data

clickhouse-client -q "select number A, now() B, 'x' C from numbers(1e6) format Parquet" > test.parquet

Maven

    <dependencies>
        <dependency>
            <groupId>com.clickhouse</groupId>
            <!--
                change to clickhouse-cli-client for TCP
                or clickhouse-grpc-client for gRPC
            -->
            <artifactId>clickhouse-http-client</artifactId>
            <version>0.4.5</version>
            <classifier>shaded</classifier>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

Java code

import java.sql.*;
import java.util.Properties;
import java.util.concurrent.ExecutionException;

import com.clickhouse.client.*;
import com.clickhouse.data.ClickHouseFormat;
import com.clickhouse.data.ClickHouseRecord;

public class Main {

    public static void main(String[] args) throws ExecutionException, ClickHouseException {
        final String DB_HOST = "localhost";
        final String USER = "default";
        final String PASS = "";
        ClickHouseNode server = ClickHouseNode.builder()
                .host(DB_HOST)
                .port(ClickHouseProtocol.HTTP, 8123)
                .database("default")
                .credentials(ClickHouseCredentials.fromUserAndPassword(USER,PASS))
                .build();

        try (ClickHouseClient client = ClickHouseClient.newInstance(server.getProtocol())) {
            ClickHouseRequest<?> request = client.connect(server);
            request.query("drop table if exists test").execute().get();
            request.query("create table test(A Int64, B DateTime, C String) engine=MergeTree() order by A").execute().get();

            client.connect(server).write()
                    .query("insert into test")
                    .format(ClickHouseFormat.Parquet)
                    .data("/Users/denis.zhuravlev/test.parquet")
                    .execute()
                    .get();

            ClickHouseResponse response = request.query("select count() from test").execute().get();
            for (ClickHouseRecord rec : response.records()) {
                System.out.println(rec.getValue(0).asString());
            }

        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw ClickHouseException.forCancellation(e, server);
        } catch (ExecutionException e) {
            throw ClickHouseException.of(e, server);
        }
    }
}

output

/Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home/bin/java -javaagent:/Users/denis.zhuravlev/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/231.8109.175/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=64663:/Users/denis.zhuravlev/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/231.8109.175/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/denis.zhuravlev/webamg/chtimetest/target/classes:/Users/denis.zhuravlev/.m2/repository/com/clickhouse/clickhouse-http-client/0.4.5/clickhouse-http-client-0.4.5-shaded.jar Main
1000000

Process finished with exit code 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment