大数据 百亿级实时查询 ClickHouse SQL mysql canal kafka 数据实时同步

目录

  • 应用场景
  • clickhouse 安装
  • clickhouse 使用教程
  • Springboot 接入 clickhouse
  • 数据同步到clickhouse
    • mysql --> canal --> kafka
    • kafka --> clickhouse kafka引擎表
    • mysql --> clickhouse
  • ClickHouse SQL语法
    • 创建数据库
    • 快速创建表 使用mysql表里的字段
    • 创建表
    • 删除表
    • 修改表名
    • 复制表结构
    • 复制表结构和数据
    • 查看表结构
    • 修改TTL
    • 新增字段
    • 修改字段类型
    • 删除字段
    • 清空字段
    • 增加注释
    • 新增数据
    • 更新数据
    • 删除数据
    • 清空表数据
    • 导出数据
    • 强制执行合并操作 (生产不推荐)
    • 更改分区
    • 物化视图

应用场景

彪悍开源的分析数据库-ClickHouse

趣头条基于ClickHouse玩转每天1000亿数据量

Clickhouse替代ES后,日志查询速度提升了38倍

基于ClickHouse的大数据全链路监控平台实践

微服务治理实战:Hadoop和Spark,都不及Clickhouse香

天啦,从Mongo到ClickHouse我到底经历了什么?

clickhouse 安装

Docker安装Clickhouse

Clickhouse Docker集群部署

常见ClickHouse集群部署架构

ClickHouse高可用集群方案

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引擎表

clickhouse同步kafka数据方案

腾讯大牛教你ClickHouse实时同步MySQL数据

mysql --> clickhouse

MySQL数据导入到ClickHouse

史上最全-mysql迁移到clickhouse的5种办法

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;

物化视图

clickhouse物化视图
clickhouse-物化视图
clickhouse物化视图详解

你可能感兴趣的:(大数据,big,data,大数据,clickhouse)