目录
应用场景
微服务治理实战:Hadoop和Spark,都不及Clickhouse香
clickhouse 安装
docker run -d --name clickhouse --net=host --log-driver json-file --log-opt max-size=500m --ulimit nofile=262144:262144 --volume=/data0/clickhouse/data:/var/lib/clickhouse --volume=/data0/clickhouse/log:/var/log/clickhouse-server --volume=/data0/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml --volume=/data0/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml yandex/clickhouse-server
clickhouse 使用教程
ClickHouse 官网文档
篇一|ClickHouse快速入门
篇二|什么是ClickHouse的表引擎?
篇三|ClickHouse的数据类型
Springboot 接入 clickhouse
springboot+mybatisplus+druid配置mysql与clickhouse多数据源配置
SpringBoot + Mybatis Plus + Druid 配置多数据源
SpringBoot + Mybatis Plus + ClickHouse增删改查入门教程
数据同步到clickhouse
mysql --> canal --> kafka
Canal Server发送binlog消息到Kafka消息队列中
如何使用Canal同步MySQL的Binlog到Kafka
基于Canal和Kafka实现MySQL的Binlog近实时同步
kafka --> clickhouse kafka引擎表
mysql --> clickhouse
ClickHouse SQL语法
创建数据库
创建本地表
CREATE DATABASE IF NOT EXISTS test_database;
创建分页式表
CREATE DATABASE IF NOT EXISTS test_database on cluster cluster_name;
删除数据库
drop database test_database;
快速创建表 使用mysql表里的字段
CREATE TABLE user_info_ck ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('127.0.0.1:5986', 'user', 'user_info', 'root', 'root');
创建表
DROP table if exists default.product_id;
CREATE TABLE default.product_id
(
factory_goods_id UInt32 COMMENT '工厂商品ID',
goods_name String COMMENT '商品名称',
shop_id UInt32 COMMENT '店铺ID',
shop_name String COMMENT '店铺名称',
create_time DateTime COMMENT '创建时间',
update_time DateTime COMMENT '更新时间'
) ENGINE = MergeTree()
PRIMARY KEY factory_goods_id
ORDER BY factory_goods_id
创建分页式表
DROP table if exists product_id on cluster cluster_name;
CREATE TABLE product_id on cluster cluster_name
(
factory_goods_id UInt32 COMMENT '工厂商品ID',
goods_name String COMMENT '商品名称',
shop_id UInt32 COMMENT '店铺ID',
shop_name String COMMENT '店铺名称',
create_time DateTime COMMENT '创建时间',
update_time DateTime COMMENT '更新时间'
) ENGINE = MergeTree()
PRIMARY KEY factory_goods_id
ORDER BY factory_goods_id
删除表
DROP table db.视图表 ON CLUSTER cluster_name;
DROP table db.本地表 ON CLUSTER cluster_name;
修改表名
rename table default.dept to scott.dept;
rename table default.dept to default.dept2;
复制表结构
CREATE TABLE IF NOT EXISTS t_emp AS scott.emp ENGINE = TinyLog
复制表结构和数据
create table if not exists t_employee engine=Memory as select * from scott.emp;
查看表结构
desc scott.emp;
修改TTL
alter table scott.emp add column remark varchar(128) comment '说明信息' TTL createtime + toIntervalDay(31);
新增字段
alter table tableName add column newcolname String;
alter table tableName add column newcolname String after col1;
修改字段类型
ALTER table advertsierdaily_super_ck MODIFY COLUMN real_principal_consume Decimal(16,4);
修改字段默认值
ALTER table advertsierdaily_superfans_ck3 MODIFY COLUMN sign DEFAULT 1;
删除字段
alter table tableName drop column newcolname;
清空字段
alter table scott.emp CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name
增加注释
alter table scott.emp COMMENT COLUMN name 'comment'
新增数据
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
更新数据
ALTER TABLE <table_name> UPDATE col1 = expr1, ... WHERE <filter>
更新和删除限制:
索引列不能进行更新
分布式表不能进行更新
该命令是异步执行的,可以通过查看表 system.mutations 来查看命令的是否执行完毕
强制更新或删除 使用 OPTIMIZE TABLE emp_table
删除数据
按分区删除
ALTER TABLE db_name.table_name DROP PARTITION '20200601'
按条件删除
ALTER TABLE db_name.table_name DELETE WHERE day = '20200618'
ALTER TABLE test_user_ck DELETE where version >=0
清空表数据
truncate table scott.department;
导出数据
clickhouse-client --query "select * from t_order_mt where create_time='2022-06-01 12:00:00'" --format CSVWithNames> /opt/module/data/rs1.csv
强制执行合并操作 (生产不推荐)
OPTIMIZE TABLE emp_table
更改分区
CREATE TABLE traffic (
`date` Date,
...
) ENGINE = MergeTree(date, (end_time), 8192);
我想在PARTITION BY toYYYYMMDD(date)没有删除表的情况下更改如何执行此操作。
由于ALTER 查询不允许分区更改,因此可能的方法是创建一个新表
CREATE TABLE traffic_new
(
`date` Date,
...
)
ENGINE = MergeTree(date, (end_time), 8192)
PARTITION BY toYYYYMMDD(date);
并移动您的数据
INSERT INTO traffic_new SELECT * FROM traffic WHERE column BETWEEN x and xxxx;
重命名最终表。是的,这个选项涉及删除旧表(似乎没有办法跳过这一步)
DROP TABLE IF EXISTS default.traffic
rename table default.traffic_new to default.traffic;