查询语言系列—数据视图

创建视图(VIEW)

CREATE[MATERIALIZED] VIEW[IFNOTEXISTS][db.]name[TO[db.]name][ENGINE=engine][POPULATE] AS SELECT...

创建一个视图. 有两种类型的视图: 正常视图和物化(MATERIALIZED)视图.

当创建一个物化视图时, 你必须指定表引擎 – 此表引擎用于存储数据

一个物化视图工作流程如下: 当插入数据到SELECT 查询指定的表中时, 插入数据部分通过SELECT查询部分来转换, 结果插入到视图中.

正常(NORMAL)视图保存任何数据, 但是可以从任意表中读取数据. 换句话说,正常视图可以看作是查询结果的一个结果缓存. 当从一个视图中读取数据时, 此查询可以看做是 FROM语句的子查询.

例如, 假设你已经创建了一个视图:

CREATE VIEW view AS SELECT...

写一个查询:

SELECT a,b,c FROM view

此查询完全等价于子查询:

SELECT a,b,c FROM(SELECT...)


物化视图保存通过SELECT语句查询转换的数据.

当创建一个物化视图时,你必须指定一个引擎 – 存储数据的目标引擎.

一个物化视图使用流程如下:  当插入数据到 SELECT 指定的表时, 插入数据部分通过SELECT 来转换, 同时结果被插入到视图中.

如果你指定了 POPULATE, 当创建时, 现有的表数据被插入到了视图中, 类似于  CREATE TABLE ... AS SELECT ... . 否则, 在创建视图之后,查询仅包含表中插入的数据. 我们不建议使用 POPULATE, 在视图创建过程中,插入到表中的数据不插入到其中.

一个 SELECT 查询可以包含 DISTINCT, GROUP BY, ORDER BY, LIMIT... 对应的转换在每个数据块上独立执行. 例如, 如果 GROUP BY 被设置, 数据将在插入过程中进行聚合, 但仅是在一个插入数据包中.数据不再进一步聚合. 当使用一个引擎时, 如SummingMergeTree,它将独立执行数据聚合.

视图看起来和正常表相同. 例如, 你可以使用 SHOW TABLES来列出视图表的相关信息.

因此并没有一个单独的SQL语句来删除视图. 为了删除一个视图, 可以使用 DROP TABLE.

版权声明:本文版权归@神州云联科技有限公司所有,未经允许任何单位或个人不得转载,复制或以任何其他方式使用本文全部或部分,侵权必究。

你可能感兴趣的:(查询语言系列—数据视图)