当前位置: 首页 > news >正文

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

 

 进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注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_dbnode1 :) create database if not exists test_db;CREATE DATABASE IF NOT EXISTS test_dbOk.0 rows in set. Elapsed: 0.007 sec.#删除库node1 :) drop database test_db;DROP DATABASE test_dbOk.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 = TinyLogOk.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_tinylogENGINE = MemoryOk.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 t3ENGINE = Memory ASSELECT *FROM newdb.t_tinylogWHERE id > 2Ok.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 t3Ok.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 locORDER BY idOk.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列类型为UInt8node1 :) 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 示例

#创建库 testdb1node1 :) create database testdb1;#创建库 testdb2node1 :) create database testdb2;#使用库testdb1,并创建表 t1node1 :) use testdb1;node1 :) create table t1 (id UInt8 ,name String) engine = MergeTree() order by id ;#将表 t1 重命名为test1node1 :) rename table t1 to test1;#将表test1 移动到testdb2库下,并重新命名为t2, testdb1 下没有表了node1 :) rename table testdb1.test1 to testdb2.t2;

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


相关文章:

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

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…...

小程序保留2位小数据,不四舍五入

方法1: parseInt toFixed /* * 保留2位小数,不四舍五入 * 5.992550 >5.99 , 2 > 2.00 * */ const toFixed2Decimal (value) > {return (parseInt(value*100)/100).toFixed(2) } console.log(587.67*100) console.log(toFixed2Decimal(587.67…...

【linux-nginx】nginx限流以及控制访问方法

一、限流 可以使用一些模块和指令来实现限流。以下是一些常用的方法: 使用 ngx_http_limit_req_module 模块:该模块可以限制每个客户端的请求速率。你可以在 Nginx 的配置文件中启用该模块,并使用 limit_req_zone 指令来定义限流规则。例如…...

菜单和内容滚动的联动原理及代码

之前写代码有个需求:左侧是一个菜单,右边是内容,点击左侧菜单右边内容滚动到对应位置,右边内容滚动到某位置时,左侧菜单也会选中对应的菜单项。UI如下:这是大多网站的移动端都会有的需求。 解决方案一&…...

Python爬虫:单线程、多线程、多进程

前言 在使用爬虫爬取数据的时候,当需要爬取的数据量比较大,且急需很快获取到数据的时候,可以考虑将单线程的爬虫写成多线程的爬虫。下面来学习一些它的基础知识和代码编写方法。 一、进程和线程 进程可以理解为是正在运行的程序的实例。进…...

超强的Everything,吊打系统自带文件搜索功能!

目录 一、软件简介 二、软件下载 三、软件说明 一、软件简介 Everything是一款由David OReilly开发的电脑搜索软件,它可以帮助用户快速找到电脑上的文件和文件夹。与其他搜索工具不同的是,Everything使用了一种非常快速和高效的搜索算法&#xff0c…...

flink配置参数

flink-conf.yaml 基础配置 # jobManager 的IP地址jobmanager.rpc.address: localhost# JobManager 的端口号jobmanager.rpc.port: 6123# JobManager JVM heap 内存大小jobmanager.heap.size: 1024m# TaskManager JVM heap 内存大小taskmanager.heap.size: 1024m# 每个 TaskMan…...

学习Vue:安装Vue.js和设置开发环境

当您决定进入现代前端开发的世界,Vue.js 无疑是一个令人激动的选择。它以其简洁、灵活和高效的特点在开发者社区中备受赞誉。本文将为您详细介绍如何安装 Vue.js 并设置开发环境,让您能够迅速开始编写 Vue 应用程序。 步骤1:安装 Node.js 和 …...

代理技术在网络安全、爬虫和数据隐私中的多重应用

1. Socks5代理:灵活的数据中转 Socks5代理协议在网络通信中起着关键作用。与其他代理技术不同,Socks5代理不仅支持TCP连接,还能够处理UDP流量,使其在需要实时数据传输的场景中表现尤为出色。通过将请求和响应中转到代理服务器&am…...

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理 MapReduce简介 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。 MapReduce分成两个部分:Map(映射)和Reduce(归纳)。…...

KU Leuven TU Berlin 推出“RobBERT”,一款荷兰索塔 BERT

荷兰语是大约24万人的第一语言,也是近5万人的第二语言,是继英语和德语之后第三大日耳曼语言。来自比利时鲁汶大学和柏林工业大学的一组研究人员最近推出了基于荷兰RoBERTa的语言模型RobBERT。 谷歌的BERT(来自Transformers的B idirectional …...

Postern中配置和使用Socks5代理指南

在Postern中配置和使用Socks5代理,可以为你的爬虫项目提供更灵活、更可靠的网络连接。本文将向你分享如何在Postern中配置和使用Socks5代理的方法,解决可能遇到的问题 配置和使用Socks5代理的步骤: 1.了解Socks代理:了解Socks5代…...

android 窗口级模糊实现方式

在Android上实现窗口级模糊效果有多种方法,下面列出了其中两种常用的实现方式: RenderScript模糊效果: 使用ScriptIntrinsicBlur类在RenderScript中实现模糊效果。创建一个RenderScript实例并将要模糊的图像传递给它。创建一个ScriptIntrinsi…...

面试热题(数组中的第K个最大元素)

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2 输出: 5提到数组中最大元素,我们往往想到就是先给数组…...

HTTP2协议介绍

前言 HTTP是现代互联网通信的基础协议之一,早在1991年,HTTP/0.9版本就诞生了,之后又陆续发布了HTTP/1.0和HTTP/1.1,为互联网应用提供了更高效和可靠的通信方式。 随着时间的推移,互联网的规模和复杂性不断扩大&#x…...

矩阵的转置

题目: 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]]class Solution(object):def transpose(self, matrix):"&q…...

web集群学习:nginx+keepalived实现负载均衡高可用性

目录 项目架构 一,环境介绍 二,项目部署 在Web服务器上配置Web测试页面 nginx负载均衡配置 配置Nginx_Master 通过vrrp_script实现对集群资源的监控(1>通过killall命令探测服务运行状态) 通过vrrp_script实现对集群资源…...

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…...

SpringBoot复习:(37)自定义ErrorController

所有接口统一返回的数据格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…...

Linux学习之防火墙概述

防火墙分类: 软件防火墙:常用于数据包的过滤,比如限制某些ip或者端口,进行某些数据的转发或者传送 硬件防火墙:防御地域攻击 软件防火墙的分类: 包过滤防火墙:控制比较宽泛,防御效果…...

海外SEO优化中如何处理多语种网站的结构和内容_海外SEO优化中如何处理网站域名和服务器的选择

海外SEO优化中如何处理多语种网站的结构和内容 在全球化的互联网时代,拥有多语种网站不仅是一种市场拓展的手段,更是一种文化交流的桥梁。如何在海外SEO优化中有效地处理多语种网站的结构和内容,是许多企业和网站管理者面临的一个重要课题。…...

OFA图像描述模型在SolidWorks工程图纸中的应用:自动生成技术说明

OFA图像描述模型在SolidWorks工程图纸中的应用:自动生成技术说明 1. 引言 工程图纸是制造业的核心语言,但撰写技术说明却是个耗时费力的过程。设计师需要花费大量时间描述尺寸公差、材料规格、加工要求等细节,这不仅影响工作效率&#xff0…...

AI修图新体验:LongCat-Image-Edit快速部署,轻松实现图片局部修改

AI修图新体验:LongCat-Image-Edit快速部署,轻松实现图片局部修改 1. 模型简介:一句话精准修图 LongCat-Image-Edit是美团团队开源的一款革命性图像编辑工具,它能通过简单的文字指令实现图片的精准修改。与传统的图像生成工具不同…...

多模态扩展:OpenClaw调用Qwen3-32B实现截图内容分析

多模态扩展:OpenClaw调用Qwen3-32B实现截图内容分析 1. 为什么需要截图内容分析能力 去年我在整理技术文档时,经常遇到这样的场景:某个软件界面的配置项需要记录下来,但手动抄写既费时又容易出错。当时我尝试过各种OCR工具&…...

Stable Diffusion v1.5实时生成系统:5分钟搭建,实时查看图片生成全过程

Stable Diffusion v1.5实时生成系统:5分钟搭建,实时查看图片生成全过程 1. 项目介绍:打破黑盒的生成体验 你是否曾经在使用Stable Diffusion时感到困惑?输入提示词后,只能盯着进度条干等,不知道模型内部发…...

DS3234高精度RTC驱动库:±2ppm温补时钟与双闹钟SRAM应用

1. 项目概述Soldered DS3234 RTC 是一款面向嵌入式系统的高精度实时时钟(RTC)驱动库,专为 Soldered 公司设计的 DS3234 SPI 接口 RTC 模块开发。该库并非简单封装底层寄存器访问,而是围绕 DS3234 芯片三大核心能力构建&#xff1a…...

5分钟搞定!用WebRTC将ESP32-CAM视频流嵌入网页(附完整代码)

5分钟实现ESP32-CAM网页视频监控:WebRTC零基础实战指南 当你想在厨房查看烤箱状态,或是在办公室监控工作室3D打印进度时,基于浏览器的实时视频方案无疑是最便捷的选择。ESP32-CAM搭配WebRTC技术,能让你用最少的代码量构建低延迟监…...

seo网络优化费用高的原因是什么_如何预算seo网络优化费用

SEO网络优化费用高的原因是什么_如何预算SEO网络优化费用 随着互联网的迅猛发展,搜索引擎优化(SEO)已成为每个企业提升在线可见度和吸引客户的重要手段。SEO网络优化费用高的问题时常困扰着初创企业和中小企业。为什么SEO网络优化费用如此高…...

Linux驱动开发:从入门到精通的成长路径

1. 职业选择中的偶然与必然刚毕业那会儿,我压根没想过自己会走上Linux驱动开发这条路。就像很多同行一样,职业方向往往不是自己主动选择的,而是被第一份工作推着走的。记得入职第一天,主管把我叫到会议室:"Vincen…...

从模型到引擎:手把手教你用 trtexec 和 C++ API 在 Ubuntu 上部署 YOLOv8

从模型到引擎:手把手教你用 trtexec 和 C API 在 Ubuntu 上部署 YOLOv8 在计算机视觉领域,YOLOv8 凭借其卓越的实时检测性能成为工业界的热门选择。但训练好的模型要真正落地,还需要经过关键的部署环节。本文将带你深入探索两种主流部署路径…...