clickhouse拥有普通视图和物化视图,其中物化视图需要独立的存储,而普通视图只是一层简单的查询同义词。

普通视图的创建语法:

语法:

CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...

普通视图(normal view) 不存储数据,它只是一层select 查询映射,类似于表的别名或者同义词,能简化查询,对原有表的查询性能没有增强的作用,具体性能依赖视图定义的语句。

表的定义以及数据:
CREATE TABLE emp
(`empno` Int32,`ename` String,`job` String,`mgr` Int32,`hiredate` Date,`sal` Decimal(7, 2),`comm` Nullable(Decimal(7, 2)),`deptno` Int32
)
ENGINE = MergeTree()
ORDER BY empnoCREATE TABLE dept
(`deptno` Int32,`dname` String,`loc` String
)
ENGINE = LogCREATE TABLE salgrade
(`grade` Int32,`losal` Int32,`hisal` Int32
)
ENGINE = Loginsert into `dept` (`deptno`, `dname`, `loc`) values('10','ACCOUNTING','NEW YORK'),('20','RESEARCH','DALLAS'),('30','SALES','CHICAGO'),('40','OPERATIONS','BOSTON');insert into salgrade values (1,700,1200),(2,1201,1400),(3,1401,2000),(4,2001,3000),(5,3001,9999);insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7369','SMITH','CLERK','7902','1980-12-17','800.00',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7499','ALLEN','SALESMAN','7698','1981-02-20','1600.00','300.00','30');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7521','WARD','SALESMAN','7698','1981-02-22','1250.00','500.00','30');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7566','JONES','MANAGER','7839','1981-04-02','2975.00',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7654','MARTIN','SALESMAN','7698','1981-09-28','1250.00','1400.00','30');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7698','BLAKE','MANAGER','7839','1981-05-01','2850.00',NULL,'30');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7782','CLARK','MANAGER','7839','1981-06-09','2450.00',NULL,'10');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7788','SCOTT','ANALYST','7566','1987-04-19','3000.00',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7839','KING','PRESIDENT',NULL,'1981-11-17','5000.00',NULL,'10');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7844','TURNER','SALESMAN','7698','1981-09-08','1500.00','0.00','30');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7876','ADAMS','CLERK','7788','1987-05-23','1100.00',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7900','JAMES','CLERK','7698','1981-12-03','950.00',NULL,'30');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7902','FORD','ANALYST','7566','1981-12-03','3000.00',NULL,'20');
insert into `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) values('7934','MILLER','CLERK','7782','1982-01-23','1300.00',NULL,'10');

视图操作:

1.基于单表的视图:
Clickhouse> CREATE OR REPLACE VIEW emp_sales AS
:-]     SELECT empno, ename, hiredate, sal, comm FROM emp WHERE job = 'SALESMAN';CREATE OR REPLACE VIEW emp_sales AS
SELECT empno,ename,hiredate,sal,comm
FROM emp
WHERE job = 'SALESMAN'Ok.0 rows in set. Elapsed: 0.011 sec. 直接查询表:
Clickhouse> SELECT empno, ename, hiredate, sal, comm FROM emp WHERE job = 'SALESMAN';SELECT empno,ename,hiredate,sal,comm
FROM emp
WHERE job = 'SALESMAN'┌─empno─┬─ename──┬───hiredate─┬─────sal─┬────comm─┐
│  7499 │ ALLEN  │ 1981-02-20 │ 1600.00 │  300.00 │
│  7521 │ WARD   │ 1981-02-22 │ 1250.00 │  500.00 │
│  7654 │ MARTIN │ 1981-09-28 │ 1250.00 │ 1400.00 │
│  7844 │ TURNER │ 1981-09-08 │ 1500.00 │    0.00 │
└───────┴────────┴────────────┴─────────┴─────────┘4 rows in set. Elapsed: 0.003 sec. Clickhouse> select * from emp_sales;SELECT *
FROM emp_sales┌─empno─┬─ename──┬───hiredate─┬─────sal─┬────comm─┐
│  7499 │ ALLEN  │ 1981-02-20 │ 1600.00 │  300.00 │
│  7521 │ WARD   │ 1981-02-22 │ 1250.00 │  500.00 │
│  7654 │ MARTIN │ 1981-09-28 │ 1250.00 │ 1400.00 │
│  7844 │ TURNER │ 1981-09-08 │ 1500.00 │    0.00 │
└───────┴────────┴────────────┴─────────┴─────────┘4 rows in set. Elapsed: 0.003 sec. 可以看到查询视图和查询表获取的数据是一样的,查询时间也是一样的。2.基于多表的视图:截止到20.5.27 版本支持:
多表join:
Clickhouse> SELECT e.empno, e.ename, e.job, e.sal, d.dname, d.loc, d.deptno FROM emp AS e ALL INNER JOIN dept AS d ON e.deptno = d.deptno WHERE deptno = 30;SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc,d.deptno
FROM emp AS e
ALL INNER JOIN dept AS d ON e.deptno = d.deptno
WHERE deptno = 30┌─empno─┬─ename──┬─job──────┬─────sal─┬─dname─┬─loc─────┬─d.deptno─┐
│  7499 │ ALLEN  │ SALESMAN │ 1600.00 │ SALES │ CHICAGO │       30 │
│  7521 │ WARD   │ SALESMAN │ 1250.00 │ SALES │ CHICAGO │       30 │
│  7654 │ MARTIN │ SALESMAN │ 1250.00 │ SALES │ CHICAGO │       30 │
│  7698 │ BLAKE  │ MANAGER  │ 2850.00 │ SALES │ CHICAGO │       30 │
│  7844 │ TURNER │ SALESMAN │ 1500.00 │ SALES │ CHICAGO │       30 │
│  7900 │ JAMES  │ CLERK    │  950.00 │ SALES │ CHICAGO │       30 │
└───────┴────────┴──────────┴─────────┴───────┴─────────┴──────────┘6 rows in set. Elapsed: 0.004 sec. 创建视图报错:Clickhouse> create or replace view vu_dept30 as SELECT e.empno, e.ename, e.job, e.sal, d.dname, d.loc, d.deptno FROM emp AS e ALL INNER JOIN dept AS d ON e.deptno = d.deptno WHERE deptno = 30;CREATE OR REPLACE VIEW vu_dept30 AS
SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc,d.deptno
FROM emp AS e
ALL INNER JOIN dept AS d ON e.deptno = d.deptno
WHERE deptno = 30Received exception from server (version 20.5.2):
Code: 352. DB::Exception: Received from localhost:9000. DB::Exception: Cannot detect left and right JOIN keys. JOIN ON section is ambiguous.. 0 rows in set. Elapsed: 0.002 sec. create or replace view vu_dept30 as SELECT
emp.empno,
emp.ename,
emp.job,
emp.sal,
dept.dname,
dept.loc,
dept.deptno
FROM emp
ALL INNER JOIN dept  ON emp.deptno = dept.deptno
WHERE deptno = 30现在的版本不支持表的表名来创建视图,只只支持表的全名。在实际使用中是会有些局限,特别是当表名比较长的时候。

视图操作:

1.查看视图的定义:Clickhouse> show create table emp_sales\GSHOW CREATE TABLE emp_salesRow 1:
──────
statement: CREATE VIEW default.emp_sales
(`empno` Int32,`ename` String,`hiredate` Date,`sal` Decimal(7, 2),`comm` Nullable(Decimal(7, 2))
) AS
SELECT empno,ename,hiredate,sal,comm
FROM default.emp
WHERE job = 'SALESMAN'1 rows in set. Elapsed: 0.002 sec. 2.视图的删除:
Clickhouse> drop view emp_sales;DROP VIEW emp_salesOk.0 rows in set. Elapsed: 0.001 sec. 普通视图不支持alter操作。

限制:

参考:

https://clickhouse.tech/docs/en/sql-reference/statements/create/view/

https://github.com/ClickHouse/ClickHouse/issues/12532

Clickhouse 普通视图相关推荐

  1. clickhouse 物化视图使用详解

    前言 视图这个概念大家并不陌生,在mysql中,视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据.作为一个select语句保存在数据字典中的.通过视图,可以展现基表(用来创建视图的表 ...

  2. ClickHouse 物化视图

    像通常的计算一样,强大的能力意味着至少有一点复杂性.这篇由两部分组成的文章通过准确解释物化视图的工作原理来填补空白,以便即使是初学者也可以有效地使用它们.我们将提供几个详细的示例,您可以根据自己的用途 ...

  3. clickhouse物化视图优缺点_ClickHouse 适用场景

    Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS). 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务.但 ...

  4. 【Clickhouse】Clickhouse 普通视图

    文章目录 1.概述 1.概述 转载:https://vkingnew.blog.csdn.net/article/details/107350687 clickhouse拥有普通视图和物化视图,其中物 ...

  5. clickhouse 物化视图_再谈clickHouse:微博基于 ClickHouse 监控百亿流量下的指标

    一.前言 广告业务监控中,我们经常碰到多维度的数据储存和查询分析需求,比如,我们可能需要基于秒级粒度去统计某个接口 TP999 耗时,或者需要基于秒级粒度去统计微博广告在各个场景下的请求量,再或者我们 ...

  6. ClickHouse 物化视图在微信的实战

    前言 ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微信也在分阶段逐步推进clickhouse的建设和应用,目前作为基础建设的一部分,主要针对于OLAP场景,为业务方提 ...

  7. Clickhouse 物化视图 MATERIALIZED VIEW

    MATERIALIZED VIEW 物化视图物化视图支持表引擎,数据的保存形式由表的引擎决定.创建语法: CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db. ...

  8. Clickhouse物化视图详解

    文章目录 物化视图 1 概述 1.1 物化视图与普通视图的区别 1.2 优缺点 1.3 基本语法 1.4 创建物化视图的限制 1.5 物化视图的数据更新 2 案例实操 2.1 准备测试用表和数据 2. ...

  9. Clickhouse物化视图

    一.概念 clickhouse的物化视图是一种查询结果的持久化,给我们带来了查询效率的提升.用户查询效果和查表没有区别,其本质就是一张表,一张时刻在预计算的表,创建的过程用了一个特殊引擎: 注:使用c ...

  10. 【Clickhouse】Clickhouse 物化视图 MATERIALIZED VIEW

    文章目录 1.概述 2.物化视图 2.案例 2.1 案例1 参考: 1.概述 2.物化视图 物化视图支持表引擎,数据的保存形式由表的引擎决定. 创建语法: CREATE [MATERIALIZED] ...

最新文章

  1. 12、动态视图组件ListView、GridView
  2. @PostConstruct注解学习
  3. Hive精华问答 | Hive和传统数据库有什么不同?
  4. mysql主从复制简单实现
  5. 《沟通的技术——让交流、会议与演讲更有效》一第一部分 建导准备
  6. redis常用内容信息:
  7. 计算机组装与配置答案,解答电脑组装配置有哪些
  8. linux清理磁盘空间的脚本,使用 shell 自动释放磁盘空间
  9. 韩寒诉百度文库侵权案分析
  10. 天梯 L1 Practic1 题解合集
  11. 一个关于微信微信免费自动投票软件与专门投票的微信群的教程介绍
  12. 网络基础知识汇总学习
  13. vue3.0 结合element ui 开发后台ui框架
  14. Manjaro为包管理器pacman和yaourt\yay 添加多线程下载
  15. 开发、运维、业务都说好的全栈云原生长这样
  16. 如何自己烧制全文RSS(打造自己RSS源)
  17. 自从有了BI商业智能系统,再也不用担心我的作图了!!!(图文)
  18. spring中涉及到的设计模式
  19. 二、计算机网络的标准化工作
  20. WPS 2019 去除自动升级 和 广告、及优化的点

热门文章

  1. 基于Java的线上诊疗系统毕业设计源码1617411
  2. MySql大批量生成测试数据
  3. X1000之LCD部分的翻译
  4. 【微信小程序系列:三】前端实现微信支付与代扣签约
  5. HDMI CEC HDCP
  6. 计算机工作面试需要准备什么,视频面试手机还是电脑 面试前的准备工作要做好...
  7. 磁珠 符号_超实用理解磁珠
  8. 舞蹈课(dance.cpp/c/pas)
  9. mysql创建聚集索引sql_SQL:聚集索引和非聚集索引
  10. KeilC51基础 利用仿真测试代码的运行时间