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

 

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注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目录,当物化视图中同步基表数据时,目录中有对应的列文件和元数据记录文件,与普通创建表一样,有目录结构。


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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python功能制作之简单的3D特效

需要导入的库: pygame: 这是一个游戏开发库,用于创建多媒体应用程序,提供了处理图形、声音和输入的功能。 from pygame.locals import *: 导入pygame库中的常量和函数,用于处理事件和输入。 OpenGL.GL: 这是OpenGL的Python绑定…

奥威BI数据可视化工具:360度呈现数据,告别枯燥表格

随着企业数据量的不断增加,如何有效地进行数据分析与决策变得越来越重要。奥威BI数据可视化工具作为一款强大的数据分析工具,在帮助企业深入挖掘数据价值方面具有显著优势。 奥威BI数据可视化工具是一款基于数据仓库技术的数据分析工具,具有…

07-微信小程序-注册页面-模块化

07-微信小程序-注册页面 文章目录 注册页面使用 Page 构造器注册页面参数Object初始数据案例代码 生命周期回调函数组件事件处理函数setData()案例代码 生命周期模块化 注册页面 对于小程序中的每个页面,都需要在页面对应的 js 文件中进行注册,指定页面…

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】

题目 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22输…

Newsprk Newspaper新闻报纸WordPress主题

Newsprk Newspaper新闻报纸WordPress主题对于任何使用 WordPress 技术构建的新闻和杂志网站来说都是一个有吸引力且时尚的主题。Newsprk – 报纸 WordPress 主题非常适合任何新闻/杂志或与以下类别匹配的任何特定业务,如博客、体育、时尚、科学、足球、政治、视频、…

利用Jackson封装常用的JsonUtil工具类

在实际开发中,我们对于 JSON 数据的处理,通常有这么几个第三方工具包可以使用: gson:谷歌的fastjson:阿里巴巴的jackson:美国FasterXML公司的,Spring框架默认用的 由于以前一直用习惯了阿里的…

多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测

多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测; 2.运行环境为Matlab20…

无涯教程-PHP - sql_regcase()函数

sql_regcase() - 语法 string sql_regcase (string string) 可以将sql_regcase()函数视为实用程序函数,它将输入参数字符串中的每个字符转换为包含两个字符的带括号的表达式。 sql_regcase() - 返回值 返回带括号的表达式字符串以及转换后的字符。 sql_regcase…

8月17日上课内容 第三章 LVS+Keepalived群集

本章结构 Keepalived概述 keepalived 概述 1.服务功能 故障自动切换 健康检查 节点服务器高可用 HA keepalived工作原理 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题 在一个LVS服务集群中通常有主服务器 (MAST…

【Linux】网络层协议:IP

我们必须接受批评,因为它可以帮助我们走出自恋的幻象,不至于长久在道德和智识上自我陶醉,在自恋中走向毁灭,事实上我们远比自己想象的更伪善和幽暗。 文章目录 一、IP和TCP之间的关系(提供策略 和 提供能力&#xff09…

【高危】Apache Airflow Spark Provider 任意文件读取漏洞 (CVE-2023-40272)

漏洞描述 Apache Airflow Spark Provider是Apache Airflow项目的一个插件,用于在Airflow中管理和调度Apache Spark作业。 受影响版本中,在JDBC连接时,由于没有对conn_prefix参数做验证,允许输入"?"来指定参数。攻击者…

k8s简介、虚拟机快速搭建k8s集群、集群管理方式及K8S工作原理和组件介绍

文章目录 1、k8s简介1.1、部署方式的变迁1.2、定义1.3、Kubernetes提供的功能 2、虚拟机快速搭建k8s集群2.1、虚拟机配置(centos7 2G内存2个处理器)2.2、基础环境准备2.3、docker安装(易踩坑)2.4、安装k8s组件2.5、master节点部署…

okhttp源码简单流程分析

拦截器详细解析可以看大佬简书 "https://www.jianshu.com/p/6fac73f7570f"和 “https://www.jianshu.com/p/3c740829475c” okhttp请求流程 1:OkHttpClient okHttpClient new OkHttpClient.Builder() 构建一个okhttpClient对象,传入你想传入的…

ThinkPHP6.0+ 使用Redis 原始用法

composer 安装 predis/predis 依赖&#xff0c;或者安装php_redis.dll的扩展。 我这里选择的是predis/predis 依赖。 composer require predis/predis 进入config/cache.php 配置添加redis缓存支持 示例&#xff1a; <?php// -----------------------------------------…

【学习笔记之java】使用RestTemplate调用第三方接口

1.首先需要导入依赖 <!-- RestTemplate使用导入的依赖--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>2.跟启动类同级创建…

【Linux操作系统】深入探索Linux系统编程中的信号集操作函数

在Linux系统编程中&#xff0c;信号集操作函数是非常重要的工具&#xff0c;它们允许我们对信号进行管理和控制。本篇博客将详细介绍Linux系统编程中的信号集操作函数&#xff0c;包括信号集的创建、添加和删除信号&#xff0c;以及对信号集进行操作的常用函数。通过深入了解这…

拒绝摆烂!C语言练习打卡第五天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…

〔015〕Stable Diffusion 之 模型管理和信息管理插件 篇

✨ 目录 &#x1f388; 模型管理&#x1f388; 添加预览图&#x1f388; 添加详细描述&#x1f388; 模型分组&#x1f388; 下载 Civitai Helper 插件&#x1f388; 插件 Civitai Helper 使用方法 &#x1f388; 模型管理 点击生成按钮下的 显示/隐藏扩展模型 Show/hide extr…

非常好用的Python单行代码详解

概要 有用的 Python 单行代码片段&#xff0c;只需一行代码即可解决特定编码问题&#xff01;在本文中&#xff0c;将分享20 个 Python 一行代码&#xff0c;你可以在 30 秒或更短的时间内轻松学习它们。这种单行代码将节省你的时间&#xff0c;并使你的代码看起来更干净且易于…

Hadoop集群搭建(hadoop-3.3.5)

一、修改服务器配置文件 1、配置环境变量 vim /etc/profile #java环境变量 export JAVA_HOME/usr/local/jdk/jdk8 export JRE_HOME$JAVA_HOME/jre export CLASSPATH$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH #hadoop环境变量 …