IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ClickHouse的SQL相关(四) -> 正文阅读

[大数据]ClickHouse的SQL相关(四)

介绍

基本上来说传统关系型数据库(以 MySQL 为例)的 SQL 语句,ClickHouse 基本都支持, 这里不会从头讲解 SQL 语法只介绍 ClickHouse 与标准 SQL(MySQL)不一致的地方。

DDL相关语句

//手动合并optimize table t_order_mt2 final;

//包含二级稀疏索引
create table t_order_mt2 (
	id Uint32,
	sku_id String,
	total_amount Decimal(16,2),
	create_time Datetime,
	index a total_amount type minmax granularitys
) engine = mergeTree|ReplacingMergeTree(根据入参字段做去重依据,如果没有参数以最后一条数据为准)
parition by toYYYYMMDD(create_time)
primary by (id,sku_id)
order by (id,sku_id)
settings index_granulrity = 8192;


//包含数据过期时间TTL(表级别和字段级别)
create table t_order_mt2 (
	id Uint32,
	sku_id String,
	total_amount Decimal(16,2) TTL create_time+interval 10 second,//秒、分、时、天、月、年等都可以
	create_time Datetime,
	index a total_amount type minmax granularitys
) engine = mergeTree
parition by toYYYYMMDD(create_time)
primary by (id,sku_id)
order by (id,sku_id)
//具体字段设置TTL也可以写在最后
TTL total_amount + interval 10 second;


alter table t_order_mt2 modify TTL create_time+interval 10 second;
alter table t_order_mt2 modify column total_amount Decimal(16,2) TTL create_time+interval 10 second;

//合并引擎/去重引擎表/聚合引擎(根据order by字段进行group by进行参数字段聚合,其他字段保存最早的数据)
create table t_order_mt2 (
	id Uint32,
	sku_id String,
	total_amount Decimal(16,2),
	create_time Datetime
) engine = mergeTree/ReplacingMergeTree(根据入参字段做去重依据,如果没有参数以最后一条数据为准)/SummingMergeTree(依据参数字段进行聚合,可多个)
parition by toYYYYMMDD(create_time)
primary by (id,sku_id)
order by (id,sku_id)
settings index_granulrity = 8192;

1 Insert

基本与标准 SQL(MySQL)基本一致
(1)标准

insert into [table_name] values(...),(....)

(2)从表到表的插入

insert into [table_name] select a,b,c from [table_name_2]

2 Update 和 Delete

ClickHouse 提供了 Delete 和 Update 的能力,这类操作被称为 Mutation |/mju?’te??(?)n/| (突变)查询,它可以看做 Alter 的一种。

虽然可以实现修改和删除,但是和一般的 OLTP 数据库不一样,Mutation 语句是一种很“重”的操作,而且不支持事务。

“重”的原因主要是每次修改或者删除都会导致放弃目标数据的原有分区,重建新分区。所以尽量做批量的变更,不要进行频繁小数据的操作。

(1)删除操作

alter table t_order_smt **delete** where sku_id ='sku_001';

(2)修改操作

alter table t_order_smt update total_amount=toDecimal32(2000.00,2) where id=102;

由于操作比较“重”,所以 Mutation 语句分两步执行,同步执行的部分其实只是进行新增数据新增分区和并把旧分区打上逻辑上的失效标记。直到触发分区合并的时候,才会删除旧数据释放磁盘空间,一般不会开放这样的功能给用户,由管理员完成。

3 查询操作

ClickHouse 基本上与标准 SQL 差别不大

  • ? 支持子查询

  • ? 支持 CTE(Common Table Expression 公用表表达式 with 子句)

  • ? 支持各种JOIN,但是JOIN操作无法使用缓存,所以即使是两次相同的JOIN语句,ClickHouse 也会视为两条新 SQL

    A join B 将B表加载到缓存中,然后再和A表一一匹配

  • ? 窗口函数(官方正在测试中…)

  • ? 不支持自定义函数

  • ? GROUP BY 操作增加了 with rollup\with cube\with total 用来计算小计和总计。

(1)插入数据

alter table t_order_mt delete where 1=1;
 insert into t_order_mt values (101,'sku_001',1000.00,'2020-06-01 12:00:00'), 
(101,'sku_002',2000.00,'2020-06-01 12:00:00'),
 (103,'sku_004',2500.00,'2020-06-01 12:00:00'), 
 (104,'sku_002',2000.00,'2020-06-01 12:00:00'), 
 (105,'sku_003',600.00,'2020-06-02 12:00:00'), 
 (106,'sku_001',1000.00,'2020-06-04 12:00:00'), 
 (107,'sku_002',2000.00,'2020-06-04 12:00:00'), 
 (108,'sku_004',2500.00,'2020-06-04 12:00:00'), 
 (109,'sku_002',2000.00,'2020-06-04 12:00:00'), 
 (110,'sku_003',600.00,'2020-06-01 12:00:00');

(2)with rollup:从右至左去掉维度进行小计

select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with rollup;

(3)with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计

select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with cube;

(4)with totals: 只计算合计

select id , sku_id,sum(total_amount) from t_order_mt group by id,sku_id with totals;

4 alter 操作

同 MySQL 的修改字段基本一致

1)新增字段

alter table **tableName** add column **newcolname** String after col1;

2)修改字段类型

alter table tableName modify column newcolname String;

3)删除字段

alter table tableName drop column newcolname;

5 导出数据

clickhouse-client --query "select * from t_order_mt where
create_time='2020-06-01 12:00:00'" --format CSVWithNames>
/opt/module/data/rs1.csv

我的公众号

????????????????????????????????????????img

本文作者:好名字
原文链接:https://www.cuizb.top/myblog/article/1639407329
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:00:53  更:2021-12-14 16:02:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:24:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码