clickhouse的docker部署与springboot整合

注意:镜像bitnami/clickhouse包含服务端和客户端,yandex版本需要使用yandex/clickhouse-server,yandex/clickhouse-server

docker启动命令(允许空密码 -e ALLOW_EMPTY_PASSWORD=yes),clickhouse版本不同,配置文件在的位置也会不一样/etc/clickhouse-server/config.xml

docker run -d --name=clickhouse -e CLICKHOUSE_ADMIN_PASSWORD=admin --ulimit nofile=262144:262144 --volume=$HOME/clickhouse/config.xml:/opt/bitnami/clickhouse/etc/config.xml bitnami/clickhouse:latest

linux系统docker启动命令(与window的区别,window启动需要与管理员运行,如果是麒麟docker需要设置–privileged,不然很多权限之类的问题)

docker run -d --name=clickhouse -p 8123:8123 -v /clcikhouse/data:/var/lib/clickhouse -e CLICKHOUSE_ADMIN_PASSWORD=admin --privileged bitnami/clickhouse:latest

启动容器将clickhouse的这两个配置文件拷贝出来,然后关闭容器,再去挂载启动容器

docker cp clickhouse :/etc/clickhouse-server/users.xml /data/clickhouse/config/users.xml
docker cp clickhouse :/etc/clickhouse-server/config.xml /data/clickhouse/config/config.xml

启动容器将clickhouse的数据挂载

 --volume=clcikhouse/clcikhouseData:/var/lib/clickhouse

clickhouse创建数据库命令

CREATE DATABASE IF NOT EXISTS my_database;

clickhouse创建表命令

-- `default`.user_info definition
CREATE TABLE default.user_info
(`id` String,`name` String,`age` Int32,`phone` String,`create_time` Date DEFAULT CAST(now(),'Date')
)
ENGINE = MergeTree
PRIMARY KEY id
ORDER BY id
SETTINGS index_granularity = 8192;

clickhouse表插入数据命令

INSERT INTO user_info(id,name,age,phone)
VALUES('1','张三',16,'13325511231'),('2','李四',20,'13825511231'),('3','马六',18,'18925511231');

clickhouse使用docke命令操作数据库命令

第一种:先进入到clickhouse容器内部,再使用命令clickhouse-client -d my_database -h 127.0.0.1查询

$ clickhouse-client -d my_database -h 127.0.0.1

clickhouse-client参数
–host, -h :服务端host名称,默认 localhost
–port :连接端口,默认9000
–user, -u :用户名,默认 default
–password :密码,默认空
–query, -q :非交互模式下的查询语句
–database, -d :默认当前操作的数据库,默认default
–multiline, -m :允许多行语句查询,在clickhouse中默认回车即为sql结束,可使用该参数多行输入
–format, -f :使用指定的默认格式输出结果 csv,以逗号分隔
–time, -t :非交互模式下会打印查询执行的时间
–stacktrace :出现异常会打印堆栈跟踪信息
–config-file :配置文件名称

第二种:在 ClickHouse 中使用 docker exec 和 clickhouse-client 进行数据库操作(如查询表、创建数据库、删除表、修改表),你可以通过以下方式编写相应的命令( --password=admin是通过密码,如果没有密码可以不写):

创建数据库:

docker exec -it clickhouse-server clickhouse-client --password=admin --query="CREATE DATABASE IF NOT EXISTS my_database"

展示某个库下的全部表命令:

docker exec ecstatic_newton clickhouse-client --password=admin --query="show tables from system;"

查询表:

docker exec -it clickhouse-server clickhouse-client --password=admin --query="SELECT * FROM system.tables"

删除表:

docker exec -it clickhouse-server clickhouse-client --password=admin --query="DROP TABLE IF EXISTS my_table IN my_database"

修改表(例如,添加新列):

docker exec -it clickhouse-server clickhouse-client --password=admin --query="ALTER TABLE my_table ADD COLUMN new_column String"

使用 Mybatis-Plus 更新方法 updateById 在 ClickHouse 中可能会报错,因为 ClickHouse不支持像传统关系型数据库那样直接更新单行数据。相反,在 ClickHouse 中更新数据通常是通过执行带有新值的插入操作来实现的

如果你想在 ClickHouse 中更新数据,可以考虑以下两种方法:

  • 插入新数据并删除旧数据:
    首先,构造一个新的实体对象,设置需要更新的字段的新值。 使用 Mybatis-Plus 的 insert方法将新的实体对象插入到表中,这将创建一条新的数据行。 如果需要,可以使用 deleteById 方法删除旧数据行,以保持数据的唯一性。
  • 执行 ClickHouse 的 SQL 更新语句:
    直接执行 ClickHouse 支持的 SQL 更新语句,例如 ALTER TABLE … UPDATE … WHERE …。
    可以通过 Mybatis-Plus 的 @Select 注解或者直接调用底层的 JDBC 连接来执行这些 SQL 语句。 需要注意的是,由于
    ClickHouse 的特性和限制与传统关系型数据库不同,需要根据具体情况选择合适的更新方法,并确保符合 ClickHouse
    的规范和性能要求

修改users.xml文件,在中添加如下内容就可以添加用户名:custom,密码:123456

  <users><custom><password>123456</password></custom></users>

sprinboot的yml配置

server:port: 8080
# mybatis-plus 配置
mybatis-plus:type-aliases-package: com.example.clickhouse.entitymapper-locations: classpath*:mapper/xml/*.xmlspring:datasource:type: com.alibaba.druid.pool.DruidDataSourceclick:driverClassName: ru.yandex.clickhouse.ClickHouseDriverurl: jdbc:clickhouse://192.168.11.50:8123/defaultusername: defaultpassword:initialSize: 10maxActive: 100minIdle: 10maxWait: 6000

sprinboot的pom配置

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.13</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><!-- clickHouse数据库 --><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.1.53</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

sprinboot的ConnectionClickhouseConfig

package com.example.clickhouse.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @Description:* @Author: xu* @Data: 2024-2024/2/18-20* @Version: V1.0*/@Data
@Component
@ConfigurationProperties(prefix = "spring.datasource.click")
public class ConnectionClickhouseConfig {private String username;private String password;private String driverClassName;private String url;private Integer initialSize;private Integer maxActive;private Integer minIdle;private Integer maxWait;
}

sprinboot的DruidConfig

package com.example.clickhouse.config;import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.annotation.Resource;
import javax.sql.DataSource;/*** @Description:* @Author: xu* @Data: 2024-2024/2/18-20* @Version: V1.0*/
@Configuration
public class DruidConfig {@Resourceprivate ConnectionClickhouseConfig connectionClickhouseConfig;/*** 重写 DataSource** @return*/@Beanpublic DataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(connectionClickhouseConfig.getUrl());datasource.setDriverClassName(connectionClickhouseConfig.getDriverClassName());datasource.setInitialSize(connectionClickhouseConfig.getInitialSize());datasource.setMinIdle(connectionClickhouseConfig.getMinIdle());datasource.setMaxActive(connectionClickhouseConfig.getMaxActive());datasource.setMaxWait(connectionClickhouseConfig.getMaxWait());datasource.setUsername(connectionClickhouseConfig.getUsername());datasource.setPassword(connectionClickhouseConfig.getPassword());return datasource;}@Bean("sqlSessionFactory")public SqlSessionFactory sqlSessionFactoryBean(DataSource dynamicDataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();sessionFactory.setDataSource(dynamicDataSource);/// 创建Configuration对象MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();mybatisConfiguration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class); // 设置日志输出到控制台sessionFactory.setConfiguration(mybatisConfiguration);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/example/clickhouse/mapper/**/xml/*Mapper.xml"));return sessionFactory.getObject();}
}

sprinboot的UserInfo

package com.example.clickhouse.entity;import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;/*** @Description:* @Author: xu* @Data: 2024-2024/2/18-20* @Version: V1.0*/
@Data
@Accessors(chain = true)
public class UserInfo implements Serializable {private static final long serialVersionUID = 1L;private String id;private String name;private Integer age;private String phone;private String email;private String createDay;
}

sprinboot的UserInfoMapper

public interface UserInfoMapper  extends BaseMapper<UserInfo> {
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用psutil库检查脚本是否在运行

摘要 如果要判断某一脚本是否在运行&#xff0c;可以通过psutil库获取所有进程的cmdline&#xff0c;并判断指定的文件名是否在cmdline中。 目录 1.psutil库简介 2.检查代码及说明 2.1检查思路 2.2异常捕获 2.3执行方法 1.psutil库简介 psutil 是一个跨平台&#xff08;…

记一次生产jvm oom问题

前言 jvm添加以下参数&#xff0c;发生OOM时自动导出内存溢出文件 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/opt 内存分析工具&#xff1a; MAT, 下载地址&#xff1a;Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation&#xff0c; 注意工具地址…

让AI玩一千万次贪吃蛇

如果让人工智能来玩贪吃蛇游戏&#xff0c;会发生什么&#xff1f; 图源&#xff1a;DALLE 目录 贪吃蛇实现 游戏规则 游戏实现 Q学习算法实现 Q学习简介 Q表和Q值 Q学习更新规则 Q学习在贪吃蛇游戏中的应用 整体项目完整代码 运行过程截图 代码分析 环境设置 …

LeetCode142-环形链表II

参考链接&#xff1a;代码随想录&#xff1a;LeetCode142-环形链表II 总结下来就是fast指针走两步&#xff0c;slow指针走一步&#xff0c;如果相遇了&#xff0c;在相遇点B那里&#xff0c;然后链表头假设为点A&#xff0c;那么再次设置两个指针fast idx&#xff0c;slow idx&…

Jtti:怎么备份github上的数据?

备份GitHub上的数据可以通过以下几种方式来实现&#xff1a; 使用Git命令行备份&#xff1a;使用Git命令行工具将GitHub仓库克隆(clone)到本地计算机上。这样可以将GitHub仓库的所有文件和历史记录复制到本地&#xff0c;作为备份。使用以下命令将仓库克隆到本地&#xff1a; g…

2024.2.23 C++QT 作业

思维导图 练习题 1>简单实现闹钟播报&#xff0c;设置时间&#xff0c;当系统时间与设置时间相同时播报语音5次&#xff0c;然后停止。如果设置时间小于当前系统时间&#xff0c;则弹出消息提示框&#xff0c;并清空输入框。 #include "widget.h" #include &quo…

1142.百亿富翁

Problem: 百亿富翁 文章目录 思路解题方法复杂度Code 思路 这是一个单调栈的问题。单调栈是一种特殊的栈结构&#xff0c;它的特点是栈中的元素保持单调性。在这个问题中&#xff0c;我们需要找到每个元素左边和右边第一个比它大的元素。我们可以使用一个单调递增的栈来解决这个…

JSON(javaScript Object Notation,Js对象标记)—我耀学IT

Json是一种轻量级的数据交换格式&#xff0c;目前使用非常广泛&#xff0c;是一种轻量级的数据交换格式。易于人阅读和编写&#xff0c;可以在多种语言之间进行数据交换 。同时也易于机器解析和生成 1.1json的值: 值可以是对象、数组、数字、字符串或者三个字面值(false、nul…

Oracle11.2.0.4设置st_shapelib.dll后报ORA-28595: Extproc 代理: DLL 路径无效错误问题

1、找st_shapelib.dll动态链接库文件 %ArcGIS\Desktop10.2\DatabaseSupport\Oracle\Windows64% 2、放到oracle路径下 把st_shapelib.dll放在%oracle_home%\bin下 3、修改extproc.ora文件 extproc.ora 文件位于 ORACLE_HOME\hs\admin 目录中。 将 ST_Geometry (st_shapelib)…

什么是nginx 、安装nginx、nginx调优

一、 什么是nginx 1.1 nginx的概念 一款高新能、轻量级Web服务软件系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 1.2 nginx模块与作用 核心模块&#xff1a;是 Nginx 服务器正常运行必不可少的模块&#xff0c;提供错…

深入理解JS的执行上下文、词法作用域和闭包(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Java程序设计】【C00262】基于Springboot的会员制医疗预约服务管理系统(有论文)

基于Springboot的会员制医疗预约服务管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的会员制医疗预约服务管理信息系统&#xff0c;本系统分为三种角色&#xff1a;管理员、医生和会员&#xff1b; 在系统…

JavaSec 基础之 XXE

文章目录 XMLReaderSAXReaderSAXBuilderDocumentBuilderUnmarshaller**SAXParserFactory**XMLReaderFactoryDigester总结 XMLReader public String XMLReader(RequestBody String content) {try {XMLReader xmlReader XMLReaderFactory.createXMLReader();// 修复&#xff1a…

如何让电脑待机而wifi不关的操作方法!!

1、一台电脑如果一天不关机&#xff0c;大约消耗0.3度电。 一般一台电脑的功耗约为250-400W&#xff08;台式机&#xff09;。 一台电脑每月的耗电量&#xff1a;如果是每小时300W每天10小时每月30天90KW&#xff0c;即90千瓦时的电。 这只是保守估计。 2、使用完毕后正常关闭…

企业微信应用开发:使用Cpolar域名配置进行本地接口回调的调试指南

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段&#xff0c;应用服务通常是部署在开发环境&#xff0c;在有数据回调的开发场…

【MATLAB】 RLMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 RLMD分解算法 RLMD&#xff08;Robust Local Mode Decomposition&#xff09;是一种鲁棒的局部模态分解方法。它是通过在局部区间内对信号进行多项式拟合&#xff0c;提取局部特征&#xff0c;进而分解信…

【Java程序设计】【C00294】基于Springboot的车辆充电桩管理系统(有论文)

基于Springboot的车辆充电桩管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的车辆充电桩管理系统 本系统前台功能模块分为&#xff1a;首页功能和用户后台管理 后台功能模块分为&#xff1a;管理员功能和…

达梦数据库搭建和连接(详解一文看懂)

达梦数据库搭建和连接 一、数据库搭建1.安装前准备2.下载 Docker3.导入安装包4.启动docker版docker-compose版 5.启动/停止数据库 二、数据库连接1、下载DBeaver2、下载驱动3、DBeaver新建驱动数据库-驱动管理器新建驱动创建新驱动设置创建驱动-库驱动类确定和关闭 4、连接 博主…

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基…

491. 非递减子序列

491. 非递减子序列 题目链接&#xff1a;491. 非递减子序列 代码如下&#xff1a; class Solution { public:void backtracking(vector<int>& nums,int index){if(path.size()>1) res.emplace_back(path);if(index>nums.size()) return;unordered_set<…