ClickHouse(十九):Clickhouse SQL DDL操作-1

news2024/11/23 15:21:58

 

 进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

1. 创建库

2. 查看数据库

​​​​​​​​​​​​​​3. 删除库

​​​​​​​4. 创建表

​​​​​​​​​​​​​​5. 查看表

​​​​​​​​​​​​​​6. 查看表的定义

​​​​​​​8. 删除表

​​​​​​​9. 修改表

​​​​​​​9.1 添加列

​​​​​​​9.2 删除列

​​​​​​​9.3 清空列

​​​​​​​9.4 给列修改注释

​​​​​​​9.5 修改列类型

​​​​​​​10. 给表重命名

10.1 给表重命名语法

10.2 示例


DDL:Data Definition Language,数据库定义语言。在ClickHouse中,DDL语言中修改表结构仅支持Merge表引擎、Distributed表引擎及MergeTree家族的表引擎,SQL 中的库、表、字段严格区分大小写。

​​​​​​​1. 创建库

  • 创建库基础语法:
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]

2. 查看数据库

  • 查看数据库语法
SHOW DATABASES;

​​​​​​​​​​​​​​3. 删除库

  • 删除库基础语法:
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
  • 示例:
#创建库 test_db

node1 :) create database if not exists test_db;

CREATE DATABASE IF NOT EXISTS test_db

Ok.

0 rows in set. Elapsed: 0.007 sec.



#删除库

node1 :) drop database test_db;

DROP DATABASE test_db

Ok.

0 rows in set. Elapsed: 0.003 sec.

注意:在创建数据库时,在/var/lib/clickhouse/metadata/目录下会有对应的库目录和库.sql文件,库目录中会存入在当前库下建表的信息,xx.sql文件中存入的是建库的信息。如图:

当删除数据库时,/var/lib/clickhouse/metadata/目录下对应的库目录和xx.sql文件也会被清空。

​​​​​​​4. 创建表

创建表的基本语法:

#第一种

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 ...

注意:以上普通第一种建表语句是直接创建表。第二种创建表方式可以创建一个与db2中name2一样结构的表,也可以指定表引擎,也可以不指定,不指定默认与db2中的name2表引擎一样,不会将表name2中的数据填充到对应的新表中。第三种方式可以指定引擎创建一个与Select 子句的结果相同结构的表,并将Select子句的结果填充它。

  • 示例:
#第一种方式创建表

node1 :) create table if not exists newdb.t1(

:-] id UInt8 default 0 comment '编号',

:-] name String default '无姓名' comment '姓名',

:-] age UInt8 default 18 comment '年龄'

:-] )engine = TinyLog;



CREATE TABLE IF NOT EXISTS newdb.t1

(

    `id` UInt8 DEFAULT 0 COMMENT '编号',

    `name` String DEFAULT '无姓名' COMMENT '姓名',

    `age` UInt8 DEFAULT 18 COMMENT '年龄'

)

ENGINE = TinyLog

Ok.

0 rows in set. Elapsed: 0.004 sec.



# 第二种方式创建表

node1 :) create table if not exists t2 engine = Memory as newdb.t_tinylog;

CREATE TABLE IF NOT EXISTS t2 AS newdb.t_tinylog

ENGINE = Memory

Ok.

0 rows in set. Elapsed: 0.006 sec.



# 第三种方式创建表

node1 :) create table if not exists t3 engine = Memory as select * from newdb.t_tinylog where id >2;

CREATE TABLE IF NOT EXISTS t3

ENGINE = Memory AS

SELECT *

FROM newdb.t_tinylog

WHERE id > 2

Ok.

0 rows in set. Elapsed: 0.010 sec.



#查询表t3数据

node1 :) select * from t3;

SELECT *

FROM t3

┌─id─┬─name─┬─age─┐

│  3 │ 王五   │  20 │

└────┴──────┴─────┘

1 rows in set. Elapsed: 0.004 sec.

​​​​​​​​​​​​​​5. 查看表

  • 查看表语法:
SHOW TABLES;

SHOW TABLES IN default;

​​​​​​​​​​​​​​6. 查看表的定义

  • 查看表定义语法:
SHOW CREATE TABLE XXX;
  • 示例:
#查看表定义

node1 :) show create table t3;

SHOW CREATE TABLE t3

┌─statement─────────────────────────────────┐

│ CREATE TABLE newdb.t3

(

    `id` UInt8,

    `Name` String

)

ENGINE = TinyLog │

└───────────────────────────────────────────┘

1 rows in set. Elapsed: 0.002 sec.

​​​​​​​7. 查看表的字段

  • 查看表定义语法:
DESC XXXX;
  • 示例:
#查看表t3的字段

node1 :) desc t3;

DESCRIBE TABLE t3

┌─name─┬─type───┬─default_type─┬─...

│ id   │ UInt8  │              │  ...

│ Name │ String │              │  ...

└──────┴────────┴──────────────┴──...

2 rows in set. Elapsed: 0.004 sec.

​​​​​​​8. 删除表

  • 删除表的基本语法:
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
  • 示例:
#删除表

node1 :) drop table t3;



DROP TABLE t3

Ok.

0 rows in set. Elapsed: 0.003 sec.

​​​​​​​9. 修改表

  • 修改表语法
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

​​​​​​​9.1 添加列

  • 示例:
#使用default 库,创建表 test1,使用MergeTree引擎

node1 :) use default;

node1 :) create table test1(id UInt8,name String)engine = MergeTree() order by id partition by name;

CREATE TABLE test1

(

    `id` UInt8,

    `name` String,

    `loc` String

)

ENGINE = MergeTree()

PARTITION BY loc

ORDER BY id

Ok.

0 rows in set. Elapsed: 0.005 sec.Ok.



#查看表test1表结构

node1 :) desc test1;

DESCRIBE TABLE test1

┌─name─┬─type───┬...

│ id   │ UInt8  │...

│ name │ String │...

│ loc  │ String │...

└──────┴────────┴...

3 rows in set. Elapsed: 0.004 sec.



#添加表字段

node1 :) alter table test1 add column age UInt8;



#查看表结构,添加字段成功

node1 :) desc test1;

DESCRIBE TABLE test1

┌─name─┬─type───┬...

│ id      │ UInt8     │...

│ name    │ String   │...

│ loc     │ String   │...

│ age     │ UInt8    │...

└─────┴─────┴...

4 rows in set. Elapsed: 0.003 sec.

​​​​​​​9.2 删除列

  • 示例:
#删除表test1中的name age字段

node1 :) alter table test1 drop column age;



#查看表 test1表结构

node1 :) desc test1;

DESCRIBE TABLE test1

┌─name─┬─type───┬...

│ id   │ UInt8  │...

│ name │ String │...

│ loc  │ String │...

└──────┴────────┴...

2 rows in set. Elapsed: 0.004 sec.

​​​​​​​9.3 清空列

注意,不能清空排序、主键、分区字段。

  • 示例:
#向表 test1中插入以下几条数据

node1 :)  insert into table test1  values (1,'张三','北京'),(2,'李四','上海'),(3,'王五','北京');



#查看表中的数据

┌─id─┬─name─┬─loc──┐

│  1  │ 张三  │ 北京  │

│  3  │ 王五  │ 北京  │

└────┴──────┴──────┘

┌─id─┬─name─┬─loc──┐

│  2  │ 李四  │ 上海  │

└────┴──────┴──────┘



#清空 test1 name列在’北京’分区的值

node1 :) alter table test1 clear column name in partition '北京';



#查看表中的数据

node1 :) select * from test1;

┌─id─┬─name─┬─loc──┐

│  1 │        │ 北京  │

│  3 │        │ 北京  │

└────┴──────┴──────┘

┌─id─┬─name─┬─loc──┐

│  2  │ 李四  │ 上海  │

└────┴──────┴──────┘



#清空 test1 name 列下的值

node1 :) alter table test1 clear column name;



#查看表中的数据

node1 :) select * from test1;

┌─id─┬─name─┬─loc──┐

│  1   │         │ 北京     │

│  3   │         │ 北京     │

└───┴────┴─────┘

┌─id─┬─name─┬─loc──┐

│  2   │         │ 上海    │

└───┴─────┴────┘

​​​​​​​9.4 给列修改注释

  • 示例:
#修改表 test1 name 列的注释

node1 :) alter table test1 comment column name '姓名';



#查看表 test1描述

┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬...

│ id    │ UInt8  │                │                         │           │...

│ name │ String │                │                         │ 姓名      │...

│ loc   │ String │                │                        │           │...

└──────┴────────┴──────────────┴────────────────────┴─────────┴...
  • ​​​​​​​9.5 修改列类型

  • 示例:
#修改表 test1 name列类型为UInt8

node1 :) alter table test1 modify column name UInt8



#node1 :) desc test1;

┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬

│ id    │ UInt8  │                 │                        │           │

│ name │ UInt8   │                │                        │ 姓名      │

│ loc   │ String │                │                        │           │

└──────┴────────┴──────────────┴────────────────────┴─────────┴

​​​​​​​10. 给表重命名

给表重新命名可以作用在任意的表引擎上。

10.1 给表重命名语法

RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster]

10.2 示例

#创建库 testdb1

node1 :) create database testdb1;



#创建库 testdb2

node1 :) create database testdb2;



#使用库testdb1,并创建表 t1

node1 :) use testdb1;

node1 :) create table t1 (id UInt8 ,name String) engine = MergeTree() order by id ;



#将表 t1 重命名为test1

node1 :) rename table t1 to test1;



#将表test1 移动到testdb2库下,并重新命名为t2, testdb1 下没有表了

node1 :) rename table testdb1.test1 to testdb2.t2;

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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习助手(安卓)

首先,这是一款人工智能的学习软件,功能非常的强大,进入软件就能看见多种功能,它可以根据大家提供的主题,环境,文体,语言等要求进行写作,还有诗歌创作,也可以帮我们进行内…

如何精准预测天气?火山引擎ByteHouse与大地量子这么做

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 伴随着气象技术的发展以及城市气象设施的完善,气象监测服务能力在不断提高,实现短期甚至中长期的气象预测成为可能。 短期、长期的天气形势预…

opencv+ffmpeg+QOpenGLWidget开发的音视频播放器demo

前言 本篇文档的demo包含了 1.使用OpenCV对图像进行处理,对图像进行置灰,旋转,抠图,高斯模糊,中值滤波,部分区域清除置黑,背景移除,边缘检测等操作;2.单纯使用opencv播放…

crm客户管理系统的功能有哪些?

阅读本文,您可以了解:1、CRM客户管理系统的定义;2、CRM客户管理系统的功能。 CRM客户管理系统是一个工具或软件,能够帮助企业更好地与客户进行沟通、理解客户需求,以及有效地处理客户信息和互动。通俗地说&#xff0c…

选择正确的液压密封件的综合指南

在液压系统中,选择正确的密封件对于确保较佳性能和防止潜在泄漏至关重要。由于有许多选择,因此需要选择较合适的液压密封件。在本文中,我们将讨论选择液压密封件时应考虑的关键因素,以帮助您做出明智的决定。 1、了解您的系统要求…

一篇文章告诉你,为什么要使用Javascript流程图来可视化进程?(上)

DHTMLX Diagram库是有各种类型的图组成的,其中最广泛使用的是JavaScript流程图,它可以显示任何类型的的工作流、过程或系统,您可以下载DHTMLX Diagram的评估版并亲自试用。 DHTMLX Diagram正式版下载 Javascript流程图是用来干什么的&#…

项目经理如何做好多项目管理?

多项目管理一直是一项极具挑战性的工作,之所以难,不仅在于项目数量的增加,而且在于项目资源分配不均、项目进度比较难监控、沟通不良,协作不畅。 项目经理应该如何做好多项目管理呢? 1、明确的项目组织结构 一个清晰…

纯js点击按钮切换首页部分页面

像我这种大数据的,不会前端的,懒得学框架,现在有gpt了,前端对于我来说,用原生的更加友好,毕竟算法gpt都能优化。 首页我有个页面,然后我现在想点击gm替换上面的统计,点击用户替换回…

低代码平台轻松玩转业务规则

规则,是运行、运作规律所遵循的法则。规则无处不在,社会活动中的规则通常由传统、公共认识形成,表现为该干什么或是不该干什么。在计算机应用系统中,经常会面对这样的场景,处理执行一个动作时,需要另外的条…

【从零学习python 】29. 「函数参数详解」——了解Python函数参数的不同用法

文章目录 函数参数详解一、缺省参数二、不定长参数三、缺省参数在*args后面可变、不可变类型总结 进阶案例 函数参数详解 一、缺省参数 调用函数时,缺省参数的值如果没有传入,则取默认值。 下例会打印默认的age,如果age没有被传入&#xf…

UI设计师的主要职责说明(合集)

UI设计师的主要职责说明1 职责: 1、负责公司移动端、PC端产品相关的交互、UI等设计 2、负责公司宣传册、海报、运营物料、banner等设计 3、负责公司品牌相关的视觉设计 3、制定相关设计规范,提高产品的可用性、不断优化产品体验; 4、与PM、运营紧密…

Labview选项卡之实现被选择选项卡工作

文章目录 前言一、使用选项卡二、实现被选择选项卡工作1、需求2、分析3、实现①、前面板②、程序框图 三、效果展示四、源码自取 前言 有些时候,我们做界面,需要好多个界面切换。如果是同一个 VI 里界面切换,一般都是选项卡了。切换不同选项…

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写 1. 引言 随着软件开发领域的不断发展,新的工具和技术不断涌现,以满足开发者在构建高效、可维护和创新性的代码方面的需求。Kotlin Symbol Processor(KSP&#xf…

ssm+vue网上花店设计源码和论文

ssmvue网上花店设计源码和论文017 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用&#xf…

无涯教程-Perl - setgrent函数

描述 此功能将枚举设置(或重置)到组条目集的开头。该函数应在第一次调用getgrent之前调用。 语法 以下是此函数的简单语法- setgrent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -wwhile( ($name,$passwd,$gid,$members)getgrent…

算法与数据结构-哈希算法

文章目录 什么是哈希算法哈希算法的应用安全加密唯一标识数据校验散列函数负载均衡数据分片分布式存储 什么是哈希算法 哈希算法的定义和原理非常简单,基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是…

Github上git lfs oid sha256文件无法下载的解决方案

问题:github上sha文件无法下载&文件超出限制 当我克隆Github上的一个库时,其中有一个包的内容格式如下: version https://git-lfs.github.com/spec/v1 oid sha256:一堆数字和字母 size 一堆数字 这堆东西类似百度网盘的下载链接和密码&a…

深入理解Python装饰器:解析高阶函数与代码美学

文章目录 🍀引言🍀什么是装饰器?🍀装饰器的基本用法🍀带参数的装饰器🍀类装饰器🍀总结 🍀引言 当谈到Python编程中的高级特性时,装饰器(decorators&#xff0…

深入理解索引B+树的基本原理

目录 1. 引言 2. 为什么要使用索引? 3. 索引的概述 4. 索引的优点是什么? 4.1 降低数据库的IO成本,提高数据查找效率 4.2 保证数据库每一行数据的唯一性 4.3 加速表与表之间的连接 4.4 减少查询中分组与排序的执行时间 5. 索引的缺点…

abp(net core)+easyui+efcore实现仓储管理系统——组织管理升级之下

在“组织管理”列表页面中使用鼠标勾选想要进行修改的组织信息,然后点击“修改”按钮。如下图。 14.此时会弹出“修改组织信息”界面,但界面上没有显示我们勾选的那一条组织信息的任何数据。如下图。 15.由于我们的功能主要都在javascript中写的&#x…