如何在ClickHouse JDBC库中添加CSV



这是在一个带有ClickHouse JDBC库的Java项目中:

<dependency>
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.2-patch11</version>
</dependency>

我想尝试通过插入CSV

String url = "jdbc:ch://localhost";
ClickHouseDataSource dataSource = new ClickHouseDataSource(url, new Properties());
ClickHouseConnection conn = dataSource.getConnection("default", "password");
ClickHousePreparedStatement clickHousePreparedStatement = (ClickHousePreparedStatement) conn.prepareStatement("INSERT INTO table FORMAT CSV < ?");

我试着用来模拟这样的东西

PreparedStatement ps = conn.prepareStatement("INSERT INTO table FORMAT CSV < ?");
ps.setString(1, "simulated csv rows separated with commas");

它有效,但不是我想要的。我想知道图书馆是否有什么具体的东西,我没有找到任何文档。

如何在ClickHouse JDBC库中附加CSV?

将CSV数据文件加载到ClickHouse数据库的一种可行方法是使用ClickHouse Java客户端。Maven依赖项称为clickhouse-client,可在此处找到。

Java客户端的文档可以在这里找到,内容并不特别丰富。请参阅下面的Java示例,其中包括指定自定义设置的功能,包括跳过CSV文件的第一行(标题(并使用逗号作为值分隔符。

// Connect to the ClickHouse server with username/password authentication
ClickHouseNode server = ClickHouseNode.builder()
.host( "127.0.0.1" )
.port( ClickHouseProtocol.HTTP )
.database( "mydatabase" )
.credentials( ClickHouseCredentials
.fromUserAndPassword( "username", "password" ) )
.build();
// Create a CSV file reference
ClickHouseFile file = ClickHouseFile.of( 
"/path/to/file.csv", ClickHouseCompression.NONE, ClickHouseFormat.CSV );
// Create a client
ClickHouseClient client = ClickHouseClient.newInstance( server.getProtocol() );
// Specify settings, load data to the specified table and wait for completion
client.write( server )
.set( "input_format_csv_skip_first_lines", "1" )
.set( "format_csv_delimiter", "," )
.table( "mytable" )
.data( file )
.executeAndWait();

最新更新