ClickHouse创建账号和连接测试
在之前搭建ClickHouse的时候,把账户相关的去掉了,所以登录和连接的时候是不需要账号密码的,但是实际项目中,肯定是需要根据需要创建账号。
一,创建账号
1,进入到 /etc/clickhouse-server, 编辑users.xml
找到users这个标签对, 这个里面子标签就是用户名。比如clickhouse的默认用户default,默认是没有密码的,如果需要密码,可以在<password></password>标签里输入密码。
修改之后重启服务
systemctl restart clickhouse-server.service
下面这个access_management开启之后,就可以使用default账号进行创建账号和授权给其他账号。
2,连接clickhouse,执行sql添加账号,并授权
clickhouse-client -m --password
再输入上面这个default账号的密码
-- 创建用户clickhouse
CREATE USER clickhouse HOST IP '0.0.0.0' IDENTIFIED WITH sha256_password BY 'clickhouse';其中
IP '0.0.0.0'
表示允许使用clickhouse用户从任何一台主机上登录clickhouse。
-- 给用户授权
GRANT ALL ON *.* TO clickhouse WITH GRANT OPTION;
-- 查看用户权限
show create user clickhouse;
-- 查看授权
show grants for clickhouse;
3, 另外一种方式创建用户
直接在上面那个users.xml里添加用户也是可以的。
在<users></users>标签中间添加
<clickhouse>
<password>clickhouse</password>
<clickhouse>
注: 这里是创建了一个账号clickhouse,密码是clickhouse。 你可以根据你的需要去创建账号。
完成保存,之后重启一下服务
二,连接ClickHouse
1,使用clickhouse账户登录
clickhouse-client -m --user clickhouse --password clickhouse
2,查看数据库
show databases;
3, 创建数据库,并切换数据库
登录之后,默认使用的schema是default
--创建数据库
CREATE DATABASE IF NOT EXISTS account;
--切换数据库
use account;
4,创建表
CREATE TABLE student
(
`StudentID` UInt32,
`StudentName` String,
`Address` String,
`Grade` Int8,
`Age` Int8,
`Gender` UInt8,
`StartTime` DateTime
)
ENGINE = CollapsingMergeTree(Grade)
PARTITION BY toYYYYMM(StartTime)
ORDER BY (StudentID);
5,查询表
show tables
6,删除表
drop table student1;
语法和Mysql相似。
三,代码中连接ClickHouse
1,导入pom依赖
<!-- ClickHouse Start -->
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.1.40</version>
</dependency>
<!-- ClickHouse End -->
2,加载驱动,插入数据,查询数据
package com.x.bigdata;
import java.sql.*;
public class TestConnectionClickHouse {
private static Connection connection = null;
static {
try {
Class.forName("ru.yandex.clickhouse.ClickHouseDriver");// 驱动包
String url = "jdbc:clickhouse://x.x.x.x:8123/account";// url路径
String user = "clickhouse";// 账号
String password = "clickhouse";// 密码
connection = DriverManager.getConnection(url, user, password);
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
insert();
select();
if (connection != null){
connection.close();
}
}
/**
* 插入数据
* @throws SQLException
*/
public static void insert() throws SQLException {
PreparedStatement prepareStatement = connection.prepareStatement("insert into account.student values (?,?,?,?,?,?,?)");
prepareStatement.setInt(1,1002);
prepareStatement.setString(2,"小猫猫");
prepareStatement.setString(3,"中国-贵州-贵阳");
prepareStatement.setInt(4,1);// 年级
prepareStatement.setInt(5,21);
prepareStatement.setInt(6,1); // 1:男,0:女
prepareStatement.setDate(7,new Date(2020,12,22));
prepareStatement.executeUpdate();
if (prepareStatement != null){
prepareStatement.close();
}
}
/**
* 查询数据
* @throws SQLException
*/
public static void select() throws SQLException {
PreparedStatement statement = connection.prepareStatement("select * from account.student");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()){
int studentID = resultSet.getInt(1);
String studentName = resultSet.getString(2);
System.out.println(studentID + "," + studentName);
}
}
}
后续就是集成到SpringBoot项目中。。。