【大数据之Hive】九、Hive之DDL(Data Definition Language)数据定义语言

news2024/11/28 3:52:28

1 数据库

[ ] 里的都是可选的操作。

1.1 创建数据库

语法:

create database [if not exists] database_name
[comment database_comment(注释)]
[location hdfs_path]
[with dbproperties (property_name-property=property_value,...)];  

如:

create database db_hive1;
create database db_hive2 location '/db_hive2';
create database db_hive3 location '/db_hive3' with dbproperties ('create_date'='2023-5-12');

如果不指定路径则默认路径为:${hive.metastore.warehouse.dir}/database_name.db
在这里插入图片描述
在这里插入图片描述

1.2 查询数据库

(1)查看数据库
语法:

show databases [like 'identifier_with_wildcards'];

模糊匹配:like通配表达式说明:*表示任意个任意字符,|表示或的关系。
如:

show databases like 'db_hive*';

(2)查看数据库信息
语法:

describe database [extended] db_name;

[extended]:是否要展示更详细信息。
如:

desc database db_hive3;
desc database extended db_hive3;

在这里插入图片描述

1.3 修改数据库

 用户可以使用 alter database 命令修改dbproperties、location、owner user信息。

PS:在修改location时不会改变当前已有表的路径信息,只改变后续创建的新表的默认父目录。
语法:

--修改dbproperties:
alter database database_name set dbproperties (property_name=property_value,...);

--修改location:
alter database database_name set location hdfs_path;

--修改owner user:
alter database database_name set owner user user_name;

如:

alter database db_hive3 set dbproperties ('create_date'='2023-5-12');

在这里插入图片描述

1.4 删除数据库

语法:

drop database [if not exists] database_name [restrict|cascade];

restrict:严格模式,若数据库不为空,则删除失败,默认为严格模式。
cascade:级联模式,若数据库不为空,则会把库中的表一起删除。
如:

--删除空数据库:
drop database db_hive2;

--删除非空数据库:
drop database db_hive3 cascade;

1.5 切换当前数据库

语法:

use database_name;

2 表

2.1 创建表

2.1.1 普通建表

语法:

create [temporary] [external] table [if not exists]
[db_name.]table_name
[(col_name data_type [comment col_comment], ...)]
[comment table_comment]
[partitioned by (col_name data_type [comment col_comment], ...)]
[clustered by (col_name,col_name, ...)
[sorted by (col_name [asc|desc], ...)] into num_buckets buckets]
[row format row_format]
[sorted as file_format]
[location hdfs_path]
[tblproperties (property_name=property_value, ...)]

关键字说明:

(1)temporary
  临时表,该表只在当前会话可见,会话结束表会被删除,常用于测试。

(2)external(重点):
  表示外部表:Hive只接管元数据,而不完全接管HDFS中的数据;在删除表时只有元数据会被删除,而hdfs文件不会被删除。
  而内部表(管理表):Hive会完全接管该表,包括元数据和HDFS中的数据;在删除表时会把hdfs数据和元数据一起删除。

(3)data_type(重点):
  Hive中字段类型分为基本数据类型和复杂数据类型。

基本数据类型:
在这里插入图片描述
复杂数据类型:
在这里插入图片描述
类型转换:
  Hive的基本数据类型可以进行类型转换。

隐式转换:
  用户不需要显式修改sql语句,hive会根据预置规则完成转换。
在这里插入图片描述
  表中小的类型可以转为大的类型。
  规则:
  (i)任何整数类型可以隐式转换为范围更广的类型:tinyint->int->bigint。
  (ii)所有整数类型、float和string可以隐式转为double。
  (iii)boolean不可以转为任何其它类型。

  如:select ‘1’+1; 结果为double类型的2,隐式转换中会找到两者可以参与转换的最小数据类型进行转换。

显式转换:
  由用户显示修改sql语句,可以借助cast函数完成显式类型转换。
语法:

cast(expr as <type>)

--如string->int
select cast('111' as int);

select '1' +2, cast('1' as int) +2;
--结果:
_c0 _c1
3.0 3

(4)partitioned by(重点):
  创建分区表(可以加快查询),将一张表的数据按照指定的分区字段分到不同的路径里,之后的一个路径就代表hive表的一个分区。
  分区根据:指定字段相同的值放到同一个分区,或按日期分区。

(5)clustered by … sorted by … into … buckets(重点):
  创建分桶表(可以加快查询),将hive一张表的数据分散存储到多个文件中。
  分散规则:指定一个或多个字段(用clustered by …),和指定buckets个数(一个buckets一个文件),对id进行取模运算并放到buckets中,sorted by … 表示对分桶里的数据进行排序。

(6)row format(重点):
  指定SERDE,SERDE是Serializer and Deserializer的简写。Hive使用SERDE序列化和反序列化每行数据。
  Hive表的读数据流程:HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
  Hive表的写数据流程:Row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files

语法一:

row format delimited
[fields terminated by char]
[collection items terminated by char]
[map keys terminated by char]
[lines terminated by char]
[null defined as char]

关键字说明:
  (i)delimited
    表示对文件中的每个字段按照特定分割符进行分割,其会使用默认的SERDE对每行数据进行序列化和反序列化。
  (ii)fields terminated by:列分割符。
  (iii)collection items terminated by:map、struct(结构体只会保存字段的值,每个字段的分隔符)和array中每个元素之间的分隔符。
  (iv)map keys terminated by:map中的key与value的分隔符。
  (v)lines terminated by:行分隔符。
  (vi)null defined as:如果某个字段为null时也必须要存储,默认”\n”。

语法二:

row format serde serde_name [with serdeproperties(property_name=property_value, ...)]

  serde:用于指定其它内置的serde或者用户自定义的serde。如JSON SERDE可用于出来json字符串,serde_name为全列名(用于序列化和反序列化)。

(7)stored as(重点):
  指定文件格式,常用的文件格式有,textfile(默认值),sequence file,orc file(列式存储)、parquet file(列式存储)等等,stored as 声明的文件格式由hive自动进行转换操作。

(8)location
  指定表所对应的HDFS路径,若不指定路径,其默认值为${hive.metastore.warehouse.dir}/db_name.db/table_name。

(9)tblproperties
  用于配置表的一些键值对参数。

案例
(1)内部表
  Hive中默认 创建的表都是内部表(管理表),Hive会完全管理表的元数据和数据文件。

  在 /opt/module/hive/datas/下创建一个txt文件:

vim /opt/module/hive/datas/student.txt

1001   student1
1002   student2
1003   student3
1004   student4
1005   student5
1006   student6

  创建内部表:

create table if not exists student(
    id int,
    name string
)
row format delimited fields terminated by '\t'
localtion '/user/hive/warehouse/student';

  上传文件到hive表的指定路径:

hadoop fs -put student.txt /user/hive/warehouse/student

  删除表,观察HDFS中的数据文件是否存在:

drop table student;   --HDFS中的数据被删除

(2)外部表
  外部表用于处理其它工具上传的数据文件,只负责管理元数据,不负责管理HDFS中的数据文件。

  创建外部表:

create external table if not exists student(
    id int,
    name string
)
roe format delimited fields terminated by '\t'
location '/user/hive/warehouse/student';

  上传文件到Hive表指定的路径:

hadoop fs -put syudent.txt /user/hive/warehouse/student

  删除表,观察HDFS中的数据文件是否存在:

drop table student;   --HDFS中的数据还存在,因为删除外部表只会删除元数据,不会删除与之相关的HDFS数据文件。

(3)SERDE和复杂数据类型:
要求:
  JSON格式的文件交由Hive处理分析。

  在/opt/module/hive/datas/下创建teacher.txt文件:

{
    "name":"zhangsan"
    "friends":[
        "lisi",
        "wangwu"    
    ],
    "student":{
        "chenming":20,
        "ligui":23            
    },
    "address":{
        "city":"beijing",
        "street":"jingsong",
        "postal_code":10010    
    }
}

  使用 json serde设计表字段,表字段与JSON字符串的一级字段一样;使用复杂数据类型保持JSON中的嵌套结构,创建表:

create table teacher
(
    name string,
    friends array<string>,
    student map<string,int>,
    address struct<city:string,street:string,postal_code:int>
)
row format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
location '/user/hive/warehouse/teacher';

  将teacher.txt文件上传到Hive表的指定路径:

hadoop fs -put teacher.txt /user/hive/warehouse/teacher

  在复杂数据类型的字段中取值:

select name form teacher;

--取array中的值:
select friends[0] from teacher;
select size(friends) from teacher;

--取map<string,int>里的字段值:
select map_keys(students) from teacher;
select map_values(students) from teacher;

--判断map中是否含有某个key的值:
select array_contains(map_keys(students),'ligui') from taecher;

--取struct里的字段值:
select address.city from teacher;

在这里插入图片描述

2.1.2 create table as select (CTAS)建表

  用create table as select 建表之后有数据,且只能创建内部表。
  用select查询的结果直接建表,新建的表结构和查询语句的结构保持一致,且select查询的结构放入新建的表中。

语法:

create [temporary] table [if not exists] table_name
[comment table_comment]
[row format row_format]
[stored as file_format]
[location hdfs_path]
[tblproperties (property_name=property_value, ...)]
[as select_statement]

如:

create table teacher1 as select * from teacher;

2.1.3 create table like建表

允许用户复刻一张以及存在的表结构,且创建的新表无数据。

create [temporary] [external] table [if not exists]
[db_name.]table_name
[like exist_table_name]
[row format row_format]
[stored as file_format]
[location hdfs_path]
[tblproperties (property_name=property_value, ...)]

如:

create table teacher2 like teacher;

2.2 查看表

2.2.1 查看完整表的创建语句

语法:

show create table table_name;
ROW FORMAT SERDE
  ‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’   对一行数据进行序列化和反序列化
STORED AS INPUTFORMAT    stored as与文件底层格式有关,因为读写数据流,声明怎么读写文件
   ‘org.apache.hadoop.mapred.TextInputFormat’
OUTPUTFORMAT
 ‘org.apache.hadoop.hive.sq.io.HiveIgnoreKeyTextOutputFormat’
LOCATION
   ‘hdfs://hadoop102:8020/user/hive/warehouse/stu’
TBLPROPERTIES(
‘bucketing_version’=2,
‘last_modified_by’=’liaoyanxia’
‘last_modified_time’=1668755681’
‘transient_clastDdlTime’=1668755681)

2.2.2 查看所有表

语法:

show tables [in database_name] like ['identifier_with_wildcards'];

like:通配表达式说明,*表示任意个任意字符,|表示或。
如:

show tables like 'db_hive*';

2.2.3 查看表信息

语法:

describe [extended | formatted] [db_name.]table_name;

extended:展示详细信息。
formatted:对详细信息进行格式化展示。
如:

--查看基本信息:
desc stu;

--查看更多信息:
desc formatted stu;

2.3 修改表

2.3.1 重命名表

语法:

alter table table_name rename to new_table_name;

如:

alter table stu rename to stu1;

2.3.2 修改列信息

语法:

--增加列:新增列位于末尾
alter table table_name add columns (col_name data_type [comment col_comment], ...);

--更新列:修改列名、数据类型、注释信息以及在表中的位置
alter table table_name change [column] col_old_name col_new_name column_type [comment col_comment] [first|after column_name];

--替换列
alter table table_name replace columns (col_name data_type [comment col_comment], ...);

如:

--添加列:
alter table stu add columns(age int);

--更新列:
alter table stu change column age ages double;

--替换列:
alter table stu replace columns(id int,name string);

--查询表结构:
desc stu;

2.4 删除表

语法:

drop table [if not exists] table_name;

如:

drop table stu;

2.5 清空表

语法:

truncate [table] table_name;

truncate只能清空内部表(管理表),不能删除外部表中的数据。
如:

truncate table student;

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

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

相关文章

真实性能测试案例之性能分析与报告

今天主要跟大家分享一个曾经所做的真实性能测试的案例&#xff0c;主要为其中性能测试分析报告过程部分&#xff0c;希望能对你以后怎么做性能分析和报告有所帮助。这个案例的测试目的为&#xff1a;在线考试为“XX平台”中的一个重要模块&#xff0c;根据目前业务的需要&#…

ChatGPT实用使用指南 让它解你所问

Chatgpt无疑是这几年来影响力最大的AI技术之一&#xff0c;生成式的AI模型正在促进各个行业的效率和自动化发展&#xff0c;Chatgpt对于个人、企业和各个行业都有着一定的影响 在我刚接触的时候&#xff0c;发现对Chatgpt的认知太肤浅了&#xff0c;一个最强的ai聊天机器人摆在…

实时检测Aruco标签坐标及位姿opencv-python4.6和4.7版本

先说opencv-contrib-python4.7.0.72时&#xff0c;aruco下面带曲线&#xff0c;但是程序也能跑&#xff0c;可以跑检测的&#xff0c;对比4.6版本需要改三个函数 4.6装opencv-contrib-python 4.7装opencv-contrib-python 1 cv2.aruco.Dictionary_get() cv2.aruco.getPredef…

Smali的使用技巧:快速定位Android应用程序中的关键代码

简述 Smali是一种Android应用程序的Dalvik虚拟机指令集汇编语言&#xff0c;用于编写和修改应用程序的DEX文件。通过编写和修改Smali代码&#xff0c;可以实现对Android应用程序的定制化和逆向分析。Smali语言类似于汇编语言&#xff0c;直接操作Dalvik虚拟机指令集。 Smali代…

2023最火的软件测试面试宝典,你刷过没?

这是一份最近疯传的软件测试面试宝典&#xff0c;你有刷过吗&#xff1f; 面试宝典一共400页&#xff0c;包括了测试基础102页&#xff0c;Linux基础38页&#xff0c;MySQL63页&#xff0c;web测试21页&#xff0c;app测试38页&#xff0c;selenium相关50页&#xff0c;性能测试…

02.引擎架构分类

简介 1.工具层 2.功能层&#xff1a;绘制、渲染、让世界里面的东西能看见、动起来 3.资源层&#xff1a;负责加载大量的数据和文件 4.核心层&#xff1a;游戏引擎的瑞士军刀&#xff0c;各种功能处理的内核 5.平台层&#xff1a;用于适配游戏不同的发行平台 第三方中间插…

3d渲染时预览和出图不一样怎么办?

在使用3dmax渲染时有时会遇到看到的图和渲染出来的图不一样的情况&#xff0c;这是为什么呢&#xff1f;有以下几方面的原因。 一、伽马 3dmax的伽马有很多&#xff0c;主要有显示伽马、输入伽马和输出伽马&#xff0c;其中预览图亮度由显示伽马决定&#xff0c;而图片亮度由输…

VUE.js中文官方文档

目录 创建一个 Vue 应用# 应用实例# 根组件# 挂载应用# DOM 中的根组件模板# 应用配置# 多个应用实例# 模板语法# 文本插值# 原始 HTML# Attribute 绑定# 简写# 布尔型 Attribute# 动态绑定多个值# 使用 JavaScript 表达式# 仅支持表达式# 调用函数# 受限的全…

隐私计算简介

随着数据规模的不断扩大和网络技术的快速发展&#xff0c;数据安全和隐私保护成为了热门的话题。隐私计算作为一种新兴的数据安全和隐私保护技术&#xff0c;为数据安全和隐私泄露问题提供了新的思路和方法。 2020年10月19日&#xff0c;Gartner发布2021年前沿战略科技趋势&am…

Blender3.2使用python脚本命令的三种方式, 以及后台渲染调用源码示例及说明

本文环境系统OS(Win10) 方式一&#xff0c;在Script(脚本)功能里面的Console(控制台输入python代码)。 如下图: 对应的三句代码是&#xff1a; print("Hi, blender.")import bpybpy.ops.mesh.primitive_cube_add(enter_editmodeFalse, alignWORLD, location(0,0, …

Vue3.0性能提升主要是通过哪几方面体现的(了解)

文章目录 一、编译阶段diff算法优化静态提升事件监听缓存SSR优化二、源码体积响应式系统 一、编译阶段 回顾Vue2&#xff0c;我们知道每个组件实例都对应一个 watcher 实例&#xff0c;它会在组件渲染的过程中把用到的数据property记录为依赖&#xff0c;当依赖发生改变&#…

【ICML 2023】Hiera详解:一个简单且高效的分层视觉转换器

【ICML 2023】Hiera详解&#xff1a;一个简单且高效的分层视觉转换器 0. 引言1. 模型介绍2. Hiera介绍2.1 为什么提出Hiera&#xff1f;2.2 Hiera 中的 Mask2.3 空间结构的分离和填充到底如何操作2.4 为什么使用Mask Unit Attn 3. 简化版理解4. 总结 0. 引言 虽然现在各种各样…

Docker 安装Tomcat、实现Tomcat集群

文章目录 1、寻找Tomcat镜像2、下载tomcat镜像&#xff08;下载最近版本&#xff09;(1) docker pull tomcat 下载(2) 查看镜像是否安装成功 3、启动容器&#xff08;跟安装Nginx一样&#xff09;4、 测试tomcat&#xff08;报错解决&#xff09;5、 搭建Tomcat集群 1、寻找Tom…

访问修饰符private,default,protected,public访问等级区别

private&#xff1a;private是最严格的访问修饰符&#xff0c;它将成员声明为私有的。私有成员只能在声明它们的类内部访问&#xff0c;其他类无法直接访问私有成员。这样可以确保数据的封装性和安全性。 default&#xff08;默认&#xff09;&#xff1a;如果没有明确指定访问…

Pytest 分组测试

有时候需要针对不同的测试环境跑不同的测试用例&#xff0c;如&#xff1a;冒烟测试、sit、uat、prd&#xff0c;所以给自动化测试用例做标记分组是很有必要的&#xff0c;pytest.mark 可以轻松实现这个功能。首先需要注册自定义标记。 注册marks 有3中方法注册marks&#xf…

【Apache Pinot】浅析 Pinot 的 Table,Index 和 Tenant 原理

本文属于基础篇幅&#xff0c;不会涉及过深入的原理&#xff0c;主要还是如何用好 Pinot 背景 单独讲 Table 概念可能有些许单薄&#xff0c;本文会扩展场景&#xff0c;讲解表的部分原理&#xff0c;表与表之间的相互影响&#xff0c;租户是怎么作用到表的&#xff0c;增加字…

一位年薪35W的测试被开除,回怼的一番话,令人沉思

一位年薪35W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…

基于深度学习的高精度袋鼠检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度袋鼠检测识别系统可用于日常生活中或野外来检测与定位袋鼠目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的袋鼠目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

活跃主机发现技术指南

活跃主机发现技术指南 1.活跃主机发现技术简介2.基于ARP协议的活跃主机发现技术3.基于ICMP协议的活跃主机发现技术4.基于TCP协议的活跃主机发现技术5.基于UDP协议的活跃主机发现技术6.基于SCTP协议的活跃主机发现技术7.主机发现技术的分析 1.活跃主机发现技术简介 在生活中有这…

继电保护名词解释三

第三章&#xff1a;电网的相间电流、电压保护和方向性相间电流、电压保护 1. 瞬时电流速断保护&#xff1a;对于仅反应于电流增大而瞬时动作的电流保护。 2. 保护装置的起动电流&#xff1a;能够使保护装置起动的最小电流值。 3. 系统最大运行方式&#xff1a;通过保护装置的…