clickhouse之create

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = engine

 

CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...

 

默认值:

指定方式:DEFAULT exprMATERIALIZED exprALIAS expr

未定义,根据类型设置对应默认值,不支持null作为普通类型的默认值

定义了默认表达式,可不定义列的类型,如没有明确定义类的类型,则使用默认表达式的类型

    EventDate DEFAULT toDate(EventTime),Date为类型

同时指定默认表达式与列的类型,将使用类型转换函数将默认表达式转换为指定的类型

 

MATERIALIZED exprr物化表达式,被改表达式指定的列不能包含在insert列表中(被计算出来的)对于insert而言,不需要考虑;在select中如包含*,该列不会被用来替换*:考虑数据转储,使用select * 的结果总能被insert回表

 

alias expr别名,这样的列不会存表中,值不能通过insert写入,同时使用select查询*,列不会被用来替换*号,可显示用于select中,在这种情况下,查询分析中别名被替换

 

使用alter查询,需要在旧数据查新列,查询时动态计算新列的值,如新列的默认表示中依赖其他列的值进行计算,将加载这些依赖列的数据

    想表添加新列,且之后修改默认表达式,旧数据中的值将被改变:运行后台合并时,缺少的列的值被计算后写入到合并后的数据中

 

不能为nested类型的列设置默认值

 

临时表:

特征:

  • 会话结束,临时表一起消失
  • 仅能够适用memory表引擎
  • 在库外创建,无法指定数据库
  • 如与表同名,查询未指定db时,先使用临时表
  • 分布式处理,查询中使用临时表将被传递到服务器
CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
)

 

分布式查询On cluster

对于create、drop、alter及rename,可运行在集群上,下在集群的all节点创建表

CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)

为正确运行,每台主机须相同的cluster、须连接到zk服务器:最终在每台主机运行,即使有些主机当前不可用

还保证了所有的查询在单台主机中的执行顺序

replicated系列表还没有支持alter查询

 

create view

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

创建视图:普通和物化

1、普通不存数据,从另个表读取:只保存了视图的查询,从视图中查询时,此查询被当做子查询替换from

      1、create view view as select ……  2、select a,b from view == select a,b from (select ……)

2、物化视图存储的数据由相应select转换得来

  创建时要指定表的引擎:使用表引擎存数据

  原理:数据写入物理视图中select子句所指定的表时,插入的数会通select转换并将结果插入到视图中

  如创建时指定了populate子句,在创建时将该表的数据插入到物理视图中,否物理视图只包含在创建后新写入的数据,不推荐使用populate:视图创建期间写入的数据不会写入其中

  当select包含group by 、distinct、order by、limit时,这些仅会在插入数据时在每个单独的数据块上执行

  不支持alter,不方便,使用to db.name,可用detach将视图剥离,再使用alter运行在目标表上,在使用attach将之前剥离的表重新加载进来

 

通过show tables查看视图,drop table删除视图

https://clickhouse.yandex/docs/zh/query_language/create/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值