临时表

简介: 临时表

ClickHouse 也有临时表的概念,创建临时表的方法是在普通表的基础之上添加 TEMPORARY 关键字,它的完整语法如下所示:

$ CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name (
  name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr],
  name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr],
)点击复制复制失败已复制


相比普通表而言,临时表有如下两点特殊之处:

  1. 它的生命周期是会话绑定的,所有它只支持Memory表引擎,如果会话结束,数据表就会被销毁。
  2. 临时表不属于任何数据库,所以在它的建表语句中,既没有数据库参数也没有表引擎参数。


既然临时表不属于任何数据库,如果临时表和普通表名称相同,会出现什么状况?接下来不妨做个测试。首先在 DEFAULT 数据库串讲测试表并写入数据:

$ CREATE TABLE tmp_v1 (
  title String
) ENGINE = Memory;
$ INSERT INTO tmp_v1 VALUES ('click')点击复制复制失败已复制


接着创建一张名称相同的临时表并写入数据:

$ CREATE TEMPORARY TABLE tmp_v1 (createtime Datetime)
$ INSERT INTO tmp_v1 VALUES (now())点击复制复制失败已复制


现在查询tmp_v1看看会发生什么:

$ SELECT * FROM tmp_v1;
┌──────────createtime─┐
│ 2022-04-09 04:29:05 │
└─────────────────────┘点击复制复制失败已复制


通过返回结果可以得出结论:临时表的优先级是大于普通表的。当两张数据表名称相同的时候,会优先读取临时表的数据。


ClickHouse 的日常使用中,通常不会刻意使用临时表。它更多被运用在 ClickHouse 的内部,是数据在集群间传播的载体

目录
相关文章
|
4月前
|
存储 SQL 关系型数据库
认识MySQL数据库中的临时表
认识MySQL数据库中的临时表。
38 5
|
4月前
|
SQL 存储 关系型数据库
认识MySQL数据库中的临时表
认识MySQL数据库中的临时表。
33 4
|
10月前
|
关系型数据库 MySQL 数据库
|
SQL 监控 数据库
|
SQL 关系型数据库 数据库
大量使用临时表带来的问题,替代方案,以及如何擦屁股
以前有使用Greenplum的朋友遇到元表膨胀的问题,总结了原因写了一篇文章如下。建议先阅读这篇文档,再阅读本文,里面有些原理我在本文就不讲了。http://blog.163.com/digoal@126/blog/static/1638770402014616113353555 近日,又有使用P
6577 0