ClickHouse(二十一):Clickhouse SQL DDL操作-临时表及视图

news2025/1/13 7:38:10

 

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

​​​​​​​1. 临时表

1.1 创建临时表语法

1.2 示例

​​​​​​​​​​​​​​2. 视图

​​​​​​​​​​​​​​2.1 普通视图

​​​​​​​2.2 物化视图


​​​​​​​1. 临时表

ClickHouse支持临时表,临时表具备以下特征:

  1. 当会话结束或者链接中断时,临时表将随会话一起消失。
  2. 临时表仅能够使用Memory表引擎,创建临时表时不需要指定表引擎。
  3. 无法为临时表指定数据库。它是在数据库之外创建的,与会话绑定。
  4. 如果临时表与另一个表名称相同,那么当在查询时没有显式的指定db的情况下,将优先使用临时表。
  5. 对于分布式处理,查询中使用的临时表将被传递到远程服务器。

1.1 创建临时表语法

CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name [ON CLUSTER cluster]

(

    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],

    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],

    ...

)

注意:不需要指定表引擎,默认是Memory

1.2 示例

#查看库 newdb下 表

node1 :) show tables;



SHOW TABLES

┌─name────────┐

│ t1            │

│ t2            │

│ t_log        │

│ t_stripelog │

│ t_tinylog    │

└─────────────┘

5 rows in set. Elapsed: 0.004 sec.



#查询表 t_log表数据

node1 :) select * from t_log;



SELECT *

FROM t_log

┌─id─┬─name─┬─age─┐

│  1  │ 张三   │  18 │

│  2  │ 李四   │  19 │

└────┴─────┴─────┘

┌─id─┬─name─┬─age─┐

│  3  │ 王五  │  20   │

│  4  │ 马六  │  21   │

│  5  │ 田七  │  22   │

└────┴─────┴─────┘

5 rows in set. Elapsed: 0.004 sec.



#创建临时表 t_log ,与当前库下的t_log同名

node1 :) create temporary table t_log(id UInt8 ,name String);



CREATE TEMPORARY TABLE t_log

(

    `id` UInt8,

    `name` String

)



Ok.



0 rows in set. Elapsed: 0.001 sec.



#查询表 t_log的数据与结构,发现没有数据,这里查询的是临时表,结构如下:

node1 :) desc t_log;



DESCRIBE TABLE t_log

┌─name─┬─type───┬

│ id   │ UInt8  │

│ name │ String │

└──────┴────────┴

2 rows in set. Elapsed: 0.003 sec.



#如果想要查询到库newdb下的t_log需要加上数据库名

node1 :) select * from newdb.t_log;



#切换库为default,同样还可以查询到表t_log,说明表不属于任何库

node1 :) use default;

node1 :) desc t_log;

DESCRIBE TABLE t_log

┌─name─┬─type───┬

│ id   │ UInt8  │

│ name │ String │

└──────┴────────┴

2 rows in set. Elapsed: 0.004 sec.



#退出客户端之后,重新登录,查询t_log不存在。

node1 :) select * from t_log;

Exception: Received from localhost:9000. DB::Exception: Table default.t_log doesn't exist..



#也可以不退出客户端直接删除临时表

node1 :) drop table t_log;



DROP TABLE t_log

Ok.

0 rows in set. Elapsed: 0.001 sec.

注意:在大多数情况下,临时表不是手动创建的,而是在使用外部数据进行查询或分布式时创建的,可以使用ENGINE = Memory的表代替临时表。

​​​​​​​​​​​​​​2. 视图

ClickHouse中视图分为普通视图和物化视图,两者区别如图所示:

​​​​​​​​​​​​​​2.1 普通视图

普通视图不存储数据,它只是一层select 查询映射,类似于表的别名或者同义词,能简化查询,对原有表的查询性能没有增强的作用,具体性能依赖视图定义的语句,当从视图中查询时,视图只是替换了映射的查询语句。普通视图当基表删除后不可用。

  • 创建普通视图语法:
CREATE [OR REPLACE] VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] AS SELECT ...
  • 示例:
#在库 newdb中创建表 personinfo

node1 :) create table personinfo(id UInt8,name String,age UInt8,birthday Date) engine = Log;



#向表 personinfo中插入如下数据:

node1 :) insert into personinfo values (1,'张三',18,'2021-06-01');

node1 :) insert into personinfo values (2,'李四',19,'2021-06-02');

node1 :) insert into personinfo values (3,'王五',20,'2021-06-03');

node1 :) insert into personinfo values (4,'马六',21,'2021-06-04');

node1 :) insert into personinfo values (5,'田七',22,'2021-06-05');



#查询表中的数据

node1 :) select * from personinfo;



SELECT *

FROM personinfo

┌─id─┬─name─┬─age─┬───birthday─┐

│  1  │ 张三  │  18 │ 2021-06-01 │

│  2  │ 李四  │  19 │ 2021-06-02 │

└────┴──────┴─────┴────────────┘

┌─id─┬─name─┬─age─┬───birthday─┐

│  3 │ 王五  │  20  │ 2021-06-03 │

│  4 │ 马六  │  21  │ 2021-06-04 │

│  5 │ 田七  │  22  │ 2021-06-05 │

└────┴──────┴─────┴────────────┘

5 rows in set. Elapsed: 0.004 sec.



#创建视图 person_view 映射查询子句

node1 :) create view person_view as select name,birthday from personinfo;

CREATE VIEW person_view AS

SELECT

    name,

    birthday

FROM personinfo

Ok.

0 rows in set. Elapsed: 0.009 sec.



#查询视图person_view中的数据结果

node1 :) select * from person_view;



SELECT *

FROM person_view

┌─name─┬───birthday─┐

│ 张三  │ 2021-06-01 │

│ 李四  │ 2021-06-02 │

└──────┴────────────┘

┌─name─┬───birthday─┐

│ 王五  │ 2021-06-03 │

│ 马六  │ 2021-06-04 │

│ 田七  │ 2021-06-05 │

└──────┴────────────┘

5 rows in set. Elapsed: 0.004 sec.



#删除视图 使用drop即可

node1 :) drop table person_view;



DROP TABLE person_view

Ok.

0 rows in set. Elapsed: 0.002 sec.

​​​​​​​2.2 物化视图

物化视图是查询结果集的一份持久化存储,所以它与普通视图完全不同,而非常趋近于表。”查询结果集”的范围很宽泛,可以是基础表中部分数据的一份简单拷贝,也可以是多表join之后产生的结果或其子集,或者原始数据的聚合指标等等。

物化视图创建好之后,若源表被写入新数据则物化视图也会同步更新,POPULATE 关键字决定了物化视图的更新策略,若有POPULATE 则在创建视图的过程会将源表已经存在的数据一并导入,类似于 create table ... as,若无POPULATE 则物化视图在创建之后没有数据,只会在创建只有同步之后写入源表的数据,clickhouse 官方并不推荐使用populated,因为在创建物化视图的过程中同时写入的数据不能被插入物化视图。

物化视图是种特殊的数据表,创建时需要指定引擎,可以用show tables 查看。另外,物化视图不支持alter 操作。

产生物化视图的过程就叫做“物化”(materialization),广义地讲,物化视图是数据库中的预计算逻辑+显式缓存,典型的空间换时间思路,所以用得好的话,它可以避免对基础表的频繁查询并复用结果,从而显著提升查询的性能。

  • 物化视图创建语法:
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...
  • 示例:
#在库 newdb 中创建物化视图 t_view1

node1 :) create materialized view  t_view1 engine = Log as select * from personinfo;



#查询 所有表

node1 :) show tables;



SHOW TABLES

┌─name───────────┐

│ .inner.t_view1 │

│ personinfo      

└────────────────┘

2 rows in set. Elapsed: 0.004 sec.



#向表 personinfo中插入如下数据:

node1 :) insert into personinfo values (1,'张三',18,'2021-06-01');

node1 :) insert into personinfo values (2,'李四',19,'2021-06-02');

node1 :) insert into personinfo values (3,'王五',20,'2021-06-03');

node1 :) insert into personinfo values (4,'马六',21,'2021-06-04');

node1 :) insert into personinfo values (5,'田七',22,'2021-06-05');



#查看物化视图 t_view1数据

node1 :) select * from t_view1;



SELECT *

FROM t_view1

┌─id─┬─name─┬─age─┬───birthday─┐

│  1 │ 张三 │  18 │ 2021-06-01 │

│  2 │ 李四 │  19 │ 2021-06-02 │

└────┴──────┴─────┴────────────┘

┌─id─┬─name─┬─age─┬───birthday─┐

│  3 │ 王五 │  20 │ 2021-06-03 │

│  4 │ 马六 │  21 │ 2021-06-04 │

│  5 │ 田七 │  22 │ 2021-06-05 │

└────┴──────┴─────┴────────────┘

5 rows in set. Elapsed: 0.004 sec.



#创建物化视图 t_view2

node1 :) create materialized view  t_view2 engine = Log as select count(name) as cnt from personinfo;



#向表 personinfo中插入以下数据

node1 :) insert into personinfo values (6,'赵八',23,'2021-06-06'),(7,'孙九',22,'2021-06-07');



#查询物化视图表 t_view2数据,可以看到做了预计算,这里不能一条条插入,不然效果是每条数据都会生成一个结果。

node1 :) select * from t_view2;



SELECT *

FROM t_view2

┌─cnt─┐

│   2  │

└─────┘

1 rows in set. Elapsed: 0.004 sec.



#删除物化视图

node1 :) drop table t_view2;

DROP TABLE t_view2

Ok.

0 rows in set. Elapsed: 0.001 sec.

注意:当创建好物化视图t_view1时,可以进入到/var/lib/clickhouse/data/newdb目录下看到%2Einner%2Et_view1目录,当物化视图中同步基表数据时,目录中有对应的列文件和元数据记录文件,与普通创建表一样,有目录结构。


👨‍💻如需博文中的资料请私信博主。


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

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

相关文章

Bean 作用域、生命周期和Spring执行流程

文章目录 Bean作用域问题案例分析公共 BeanA 用户使用时修改B 用户使用时原因分析 作用域定义Bean 的6种作用域singletonprototyperequestsessionapplicationwebsocket 设置作用域 Spring 执行流程1、启动容器2、Bean 初始化3、注册Bean对象到容器中4、装配Bean属性 Bean 生命周…

【C++11新特性】右值引用和移动语义

文章目录 1. 左值与右值1.1 左值与右值对比1.2 左值引用与右值引用 2. 右值引用的使用场景2.1 左值引用的短板2.2 右值引用和移动语义2.3 右值引用对左值的引用 3. 完美转发3.1 万能引用3.2 完美转发保持值的属性 1. 左值与右值 1.1 左值与右值对比 左值的概念 左值是一个表示…

13 MySQL

文章目录 MySQL基本使用安装RDBMS使用Navicat新建数据库新建查询--即代码运行的地方运行代码表的操作 命令行连接数据完整性数据类型约束 SQL的基础语法特性:SQL语句的分类DDL库管理 DDL表管理:DML(增删改)新增删除更新 DQL(查)DQL基础查询as 取别名消除…

Java查看https证书过期时间(JKS,CERT)

在这里需要使用X.509 证书的抽象类 X509Certificate 。此类提供了一种访问 X.509 证书所有属性的标准方式。 这些证书被广泛使用以支持 Internet 安全系统中的身份验证和其他功能。常见的应用包括增强保密邮件 (PEM)、传输层安全 (SSL)、用于受信任软件发布的代码签名和安全电…

MongoDB 数据库

目录 一、概述 二、相关概念 三、特性 四、应用的场景 五、安装及配置文件操作 一、首先配置好环境 二、安装 三、查看端口号 四、查看配置文件 五、查询已安装的软件包 六、树状图解析 六、默认数据库(默认有admin、local、config三个) 一…

Java后端开发面试题篇——Redis

Redis的数据持久化策略有哪些 RDB的执行原理? bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术: 当主进程执行读操作时,访问共享内存…

SQL-每日一题【1587. 银行账户概要 II】

题目 表: Users 表: Transactions 编写解决方案, 报告余额高于 10000 的所有用户的名字和余额. 账户的余额等于包含该账户的所有交易的总和。 返回结果表单 无顺序要求 。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查询出额高于 10000 的所有…

Yalmip入门教程(5)-约束条件操作的相关函数

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译:https://yalmip.github.io/tutorials/ 这篇博客将详细介绍yalmip工具箱中约束条件操作相关函数的用法。 1.约束条件操作的相关函数 1.1 boundingbox函数 boundingbox函数用于求出一组约…

Java基本变量

概念: 本质上来说变量是内存中的一小块区域,通过变量名来访问这块区域。因此,使用每一个变量前必须要先申请(声明)然后必须对其进行赋值,才能使用。 基本数据类型(在栈stack中) 整…

【从0开始学架构笔记】01 基础架构

文章目录 一、架构的定义1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构 二、架构设计的目的三、复杂度来源:高性能1. 单机复杂度2. 集群复杂度2.1 任务分配2.2 任务分解(微服务) 四、复杂度来源:高可用1. 计算高可用…

Python爬虫解析工具之xpath使用详解

文章目录 一、数据解析方式二、xpath介绍三、环境安装1. 插件安装2. 依赖库安装 四、xpath语法五、xpath语法在Python代码中的使用 一、数据解析方式 爬虫抓取到整个页面数据之后,我们需要从中提取出有价值的数据,无用的过滤掉。这个过程称为数据解析&a…

网络技术Vlan技术STP(第一课)

一 Vlan技术的学习 对命令的增删改查 #### 1)创建vlan[SW1]vlan 2 [2-4094] 创建vlan[SW1]vlan batch 10 20 30 创建多个不连续的vlan[SW1]display vlan 查看vlan信息[SW1]vlan batch 50 to 60创建多个连续的vlan[SW1]vlan2[SW1-vlan2]description caiwu添加描述信…

基于决策树(Decision Tree)的乳腺癌诊断

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…

AutoSAR配置与实践(基础篇)3.3 BSW的通信功能

传送门 -> AUTOSAR配置与实践总目录 AutoSAR配置与实践(基础篇)3.3 BSW的通信功能 一、收发过程概览1.1 发送过程概览1.2 接收过程概览 二、BSW的通信功能模块组成三、收发过程解析3.1 发送过程3.2 发送后的结果确认3.3 接收过程 一、收发过程概览 1…

图像编程补充:计算机图形学和数字图像处理概念

一、计算机图形学 国际标准化组织(ISO)的定义:计算机图形学是研究通过计算机将数据转换为图形,并在专门显示设备上显示的原理、方法和技术的学科。 1.1什么是计算机图形学 图形的构成要素: 图形的广义概念&#xff1…

TCP拥塞控制简单理解

1.TCP的控制机制 序号 TCP通过序号可以实现一下几个功能: 1.确认应答处理。发送端收到接收端的确认应答,可以得知某些数据包被接收端接收了 2.顺序控制。接收端可以利用序号对接收到的报文进行排序 3.重发控制。如果发送端没有收到确认应答&#xff0c…

【MT32F006】MT32F006之定时器延时

本文最后修改时间:2023年03月30日 一、本节简介 本文介绍如何使用MT32F006的定时器做us、ms级的延时。 二、实验平台 库版本:V1.0.0 编译软件:MDK5.37 硬件平台:MT32F006开发板(主芯片MT32F006) 仿真器…

【C语言】每日一题(找到所有数组中消失的数字)

找到所有数组中消失的数字,链接奉上。 这里简单说一下,因为还没有接触到动态内存,数据结构,所以知识有限,也是尽力而为,结合题库的评论区找到了适合我的解法,以后有机会,会补上各种…

麻辣烫数据可视化,麻辣烫市场将持续蓬勃发展

麻辣烫,这道源自中国的美食,早已成为人们生活中不可或缺的一部分。它独特的香辣口味,让人忍不住每每流连忘返。与人们的关系,简直如同挚友一般。每当寒冷的冬日或疲惫的时刻,麻辣烫总是悄然走进人们的心房,…

Winload.efi丢失或损坏怎么办?

Winload.efi是一个EFI(或可扩展固件接口)文件。可执行的EFI文件适用于基于计算机系统的UEFI,并将文件加载到计算机引导加载程序的执行任务。它们包含有关操作系统引导过程应如何进行的重要数据。因此,Winload.efi文件对于成功启动…