Hive数据库与表操作全指南

目录

Hive数据库操作详解

 创建数据库

1)语法

2)案例

 查询数据库

1)展示所有数据库

(1)语法

(2)案例

2)查看数据库信息

(1)语法

(2)案例

 修改数据库

1)语法

2)案例

 删除数据库

1)语法

2)案例

 切换当前数据库

1)语法

 Hive表操作详解

 创建表

 语法

1)普通建表

(1)完整语法

(2)关键字说明:

2)Create Table As Select(CTAS)建表

3)Create Table Like语法

 案例

1)内部表与外部表

(1)内部表

(2)外部表

2)SERDE和复杂数据类型

3)create table as select 和 create table like

(1)create table as select

(2)create table like

 查看表

1)展示所有表

(1)语法

(2)案例

2)查看表信息

(1)语法

(2)案例

 修改表

1)重命名表

(1)语法

(2)案例

2)修改列信息

(1)语法

(2)案例

 删除表

1)语法

2)案例

 清空表

1)语法

2)案例


Hive数据库操作详解

 创建数据库

1)语法
CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
2)案例
  • 创建一个数据库,不指定路径

    hive (default)> create database db_hive1;

    注:若不指定路径,其默认路径为 ${hive.metastore.warehouse.dir}/database_name.db

  • 创建一个数据库,指定路径

    hive (default)> create database db_hive2 location '/db_hive2';
  • 创建一个数据库,带有 dbproperties

    hive (default)> create database db_hive3 with dbproperties('create_date'='2022-11-18');

 查询数据库

1)展示所有数据库
(1)语法
SHOW DATABASES [LIKE 'identifier_with_wildcards'];

注:LIKE 通配表达式说明:* 表示任意个任意字符,| 表示或的关系。

(2)案例
hive> show databases like 'db_hive*';
OK
db_hive_1
db_hive_2
2)查看数据库信息
(1)语法
DESCRIBE DATABASE [EXTENDED] db_name;
(2)案例
  1. 查看基本信息

    hive> desc database db_hive3;
    OK
    db_hive    hdfs://hadoop12:8020/user/hive/warehouse/db_hive.db   lzl   USER
  2. 查看更多信息

    hive> desc database extended db_hive3;
    OK
    db_name    comment    location    owner_name    owner_type    parameters
    db_hive3    hdfs://hadoop12:8020/user/hive/warehouse/db_hive3.db    lzl    USER    {create_date=2022-11-18}

 修改数据库

用户可以使用 ALTER DATABASE 命令修改数据库某些信息,其中能够修改的信息包括 dbpropertieslocationowner user。需要注意的是:修改数据库 location,不会改变当前已有表的路径信息,而只是改变后续创建的新表的默认的父目录。

1)语法
  • 修改 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;
2)案例
  • 修改 dbproperties

    hive> ALTER DATABASE db_hive3 SET DBPROPERTIES ('create_date'='2022-11-20');

 删除数据库

1)语法
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

注:RESTRICT:严格模式,若数据库不为空,则会删除失败,默认为该模式。
CASCADE:级联模式,若数据库不为空,则会将库中的表一并删除。

2)案例
  • 删除空数据库

    hive> drop database db_hive2;
  • 删除非空数据库

    hive> drop database db_hive3 cascade;

 切换当前数据库

1)语法
USE database_name;

 Hive表操作详解

 创建表

 语法
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] 
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)];
(2)关键字说明:
  1. TEMPORARY

     

    临时表,该表只在当前会话可见,会话结束,表会被删除。

  2. EXTERNAL(重点)

     

    外部表,与之相对应的是内部表(管理表)。管理表意味着Hive会完全接管该表,包括元数据和HDFS中的数据。而外部表则意味着Hive只接管元数据,而不完全接管HDFS中的数据。

  3. data_type(重点)

     

    Hive中的字段类型可分为基本数据类型和复杂数据类型。

     

    基本数据类型如下:

    Hive说明定义
    tinyint1byte有符号整数
    smallint2byte有符号整数
    int4byte有符号整数
    bigint8byte有符号整数
    boolean布尔类型,true或者false
    float单精度浮点数
    double双精度浮点数
    decimal十进制精准数字类型decimal(16,2)
    varchar字符序列,需指定最大长度,最大长度的范围是[1,65535]varchar(32)
    string字符串,无需指定最大长度
    timestamp时间类型
    binary二进制数据

    复杂数据类型如下:

    类型说明定义取值
    array数组是一组相同类型的值的集合array<string>arr[0]
    mapmap是一组相同类型的键-值对集合map<string, int>map['key']
    struct结构体由多个属性组成,每个属性都有自己的属性名和数据类型struct<id:int, name:string>struct.id

    注:类型转换

     

    Hive的基本数据类型可以做类型转换,转换的方式包括隐式转换以及显示转换。

     

    方式一:隐式转换

     

    具体规则如下:

     

    a. 任何整数类型都可以隐式地转换为一个范围更广的类型,如tinyint可以转换成int,int可以转换成bigint。

     

    b. 所有整数类型、float和string类型都可以隐式地转换成double。

     

    c. tinyint、smallint、int都可以转换为float。

     

    d. boolean类型不可以转换为任何其它的类型。

     

    详情可参考Hive官方说明:Allowed Implicit Conversionsicon-default.png?t=N7T8https://tongyi.aliyun.com/qianwen/?sessionId=05dafa94c8504e1faa491422eb8defe2#LanguageManualTypes-AllowedImplicitConversions

     

    方式二:显示转换

     

    可以借助cast函数完成显示的类型转换

     

    a. 语法

    cast(expr as <type>)

    b. 案例

    hive (default)> select '1' + 2, cast('1' as int) + 2;
    _c0  _c1
    3.0  3
  4. PARTITIONED BY(重点)

     

    创建分区表

  5. CLUSTERED BY ... SORTED BY .. INTO ... BUCKETS(重点)

     

    创建分桶表

  6. ROW FORMAT(重点)

     

    指定SERDE,SERDE是Serializer and Deserializer的简写。Hive使用SERDE序列化和反序列化每行数据。详情可参考 Hive-Serde。语法说明如下:

     

    语法一: DELIMITED关键字表示对文件中的每个字段按照特定分割符进行分割,其会使用默认的SERDE对每行数据进行序列化和反序列化。

    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]

    注:

    • FIELDS TERMINATED BY:列分隔符
    • COLLECTION ITEMS TERMINATED BY:map、struct和array中每个元素之间的分隔符
    • MAP KEYS TERMINATED BY:map中的key与value的分隔符
    • LINES TERMINATED BY:行分隔符

    语法二: SERDE关键字可用于指定其他内置的SERDE或者用户自定义的SERDE。例如JSON SERDE,可用于处理JSON字符串。

    ROW FORMAT SERDE serde_name
    [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
  7. STORED AS(重点)

     

    指定文件格式,常用的文件格式有textfile(默认值),sequence file,orc file、parquet file等等。

  8. LOCATION

     

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

  9. TBLPROPERTIES

     

    用于配置表的一些KV键值对参数

2)Create Table As Select(CTAS)建表

该语法允许用户利用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]
3)Create Table Like语法

该语法允许用户复刻一张已经存在的表结构,与上述的CTAS语法不同,该语法创建出来的表中不包含数据。

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, ...)]
 案例
1)内部表与外部表
(1)内部表

Hive中默认创建的表都是内部表,有时也被称为管理表。对于内部表,Hive会完全管理表的元数据和数据文件。

创建内部表如下:

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

准备其需要的文件如下,注意字段之间的分隔符。

[lzl@hadoop12 datas]$ vim /opt/module/datas/student.txt
1001	student1
1002	student2
1003	student3
1004	student4
1005	student5
1006	student6
1007	student7
1008	student8
1009	student9
1010	student10
1011	student11
1012	student12
1013	student13
1014	student14
1015	student15
1016	student16

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

[lzl@hadoop12 datas]$ hadoop fs -put student.txt /user/hive/warehouse/student

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

hive (default)> drop table student;
(2)外部表

外部表通常可用于处理其他工具上传的数据文件,对于外部表,Hive只负责管理元数据,不负责管理HDFS中的数据文件。

创建外部表如下:

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

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

[lzl@hadoop12 datas]$ hadoop fs -put student.txt /user/hive/warehouse/student

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

hive (default)> drop table student;
2)SERDE和复杂数据类型

本案例重点练习SERDE和复杂数据类型的使用。

若现有如下格式的JSON文件需要由Hive进行分析处理,请考虑如何设计表?

注:以下内容为格式化之后的结果,文件中每行数据为一个完整的JSON字符串。

{
  "name": "dasongsong",
  "friends": [
    "bingbing",
    "lili"
  ],
  "students": {
    "xiaohaihai": 18,
    "xiaoyangyang": 16
  },
  "address": {
    "street": "hui long guan",
    "city": "beijing",
    "postal_code": 10010
  }
}

我们可以考虑使用专门负责JSON文件的JSON Serde,设计表字段时,表的字段与JSON字符串中的一级字段保持一致,对于具有嵌套结构的JSON字符串,考虑使用合适复杂数据类型保存其内容。最终设计出的表结构如下:

hive>
create table teacher
(
  name   string,
  friends array<string>,
  students 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';

创建该表,并准备以下文件。注意,需要确保文件中每行数据都是一个完整的JSON字符串,JSON SERDE才能正确地处理。

[lzl@hadoop12 datas]$ vim /opt/module/datas/teacher.txt
{"name":"dasongsong","friends":["bingbing","lili"],"students":{"xiaohaihai":18,"xiaoyangyang":16},"address":{"street":"hui long guan","city":"beijing","postal_code":10010}}

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

[lzl@hadoop12 datas]$ hadoop fs -put teacher.txt /user/hive/warehouse/teacher

尝试从复杂数据类型的字段中取值

3)create table as select 和 create table like
(1)create table as select
hive>
create table teacher1 as select * from teacher;
(2)create table like
hive>
create table teacher2 like teacher;

 

 查看表

1)展示所有表
(1)语法
SHOW TABLES [IN database_name] LIKE ['identifier_with_wildcards'];

注:LIKE 通配表达式说明:* 表示任意个任意字符,| 表示或的关系。

(2)案例
hive> show tables like 'stu*';
2)查看表信息
(1)语法
DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name

注:EXTENDED:展示详细信息
FORMATTED:对详细信息进行格式化的展示

(2)案例
  1. 查看基本信息

    hive> desc stu;
  2. 查看更多信息

    hive> desc formatted stu;

 修改表

1)重命名表
(1)语法
ALTER TABLE table_name RENAME TO new_table_name
(2)案例
hive (default)> alter table stu rename to stu1;
2)修改列信息
(1)语法
  1. 增加列

     

    该语句允许用户增加新的列,新增列的位置位于末尾。

    ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...)
  2. 更新列

     

    该语句允许用户修改指定列的列名、数据类型、注释信息以及在表中的位置。

    ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
  3. 替换列

     

    该语句允许用户用新的列集替换表中原有的全部列。

    ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
(2)案例
  1. 查询表结构

    hive (default)> desc stu;
  2. 添加列

    hive (default)> alter table stu add columns(age int);
  3. 查询表结构

    hive (default)> desc stu;
  4. 更新列

    hive (default)> alter table stu change column age ages double;
  5. 替换列

    hive (default)> alter table stu replace columns(id int, name string);

 删除表

1)语法
DROP TABLE [IF EXISTS] table_name;
2)案例
hive (default)> drop table stu;

 清空表

1)语法
TRUNCATE [TABLE] table_name

注意:TRUNCATE 只能清空管理表,不能删除外部表中数据。

2)案例
hive (default)> truncate table student;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring之整合Mybatis底层源码解析

整合核心思路 由很多框架都需要和Spring进行整合&#xff0c;而整合的核心思想就是把其他框架所产生的对象放到Spring容器中&#xff0c;让其成为Bean。 ​ 比如Mybatis&#xff0c;Mybatis框架可以单独使用&#xff0c;而单独使用Mybatis框架就需要用到Mybatis所提供的一些类…

学习笔记八:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 测试jenkins的CI/CD在Jenkins中安装kubernetes插件安装blueocean插件配置jenkins连接到我们存在的k8s集群配置pod-template添加自己的dockerhub凭据测试通过Jenkins部署应用发布到k8s开发环境、测试环境、生产环…

手机玩机常识-----小米系列机型 Android 15 更新计划 那些机型将会更新安卓15

小米机型是很多米粉最喜欢把玩的&#xff0c;其中解锁bl root 刷写twrp以及刷第三方系统资源相对其他品牌机型来说比较丰富。目前安卓15快要更新到很多机型。我们来了解下小米系列机型的更新计划是咋样的 小米会定期更新有关 Redmi红米 设备的支持日期的数据&#xff0c;包括可…

嵌入式学习(内核链表)

内核链表和普通链表的区别&#xff1a; 1. 普通链表当中数据域和指针域&#xff0c;没有做到区分&#xff0c;数据与指针形成了一个整体&#xff0c;而内核链表数据与指针是完全剥离的没有直接的关系。 2. 在普通链表当中所有节点的数据都是一样的类型&#xff0c;而内核链表中…

HarmonyOS开发实战( Beta5.0)Native Drawing自绘制能力替代Canvas提升性能

简介 Canvas 画布组件是用来显示自绘内容的组件&#xff0c;它具有保留历史绘制内容、增量绘制的特点。Canvas 有 CanvasRenderingContext2D/OffscreenCanvasRenderingContext2D 和 DrawingRenderingContext 两套API&#xff0c;应用使用两套API绘制的内容都可以在绑定的 Canv…

【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题

WPS表格 2019版本 升级到 WPS最新版 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 使用最新版就能够解决这个问题&#xff0c;如果仍旧无法解决可以勾选如下配置 重启Excel解决。 请勾选&#xff1a;文件 - 选项 - 编辑 - 不提示且不压缩文件中的图像

html 页面引入 vue 组件之 http-vue-loader.js

一、http-vue-loader.js http-vue-loader.js 是一个 Vue 单文件组件加载器&#xff0c;可以让我们在传统的 HTML 页面中使用 Vue 单文件组件&#xff0c;而不必依赖 Node.js 等其他构建工具。它内置了 Vue.js 和样式加载器&#xff0c;并能自动解析 Vue 单文件组件中的所有内容…

电脑知识:如何恢复 Word、媒体和存档文件?

如果您是 Word 用户&#xff0c;那么您一定对无法打开 Word 文档的问题很熟悉。当文档包含大量关键信息时&#xff0c;情况会变得更加复杂。如果您遇到这种情况&#xff0c;那么您将如何处理&#xff1f; 我们再怎么强调在外部存储位置&#xff08;如外部硬盘、网络位置&#…

jenkins 工具使用

使用方式 替代手动&#xff0c;自动化拉取、集成、构建、测试&#xff1b;是CI/CD持续集成、持续部署主流开发模式中重要的环节&#xff1b;必须组件 jenkins-gitlab&#xff0c;代码公共仓库服务器&#xff08;至少6G内存&#xff09;&#xff1b;jenkins-server&#xff0c;…

flutter Image

Flutter中&#xff0c;Image是一个用于显示图片的控件&#xff0c;可以显示网络图片、本地图片以及Asset中的图片。Image控件支持多种常见的图片格式&#xff0c;例如PNG、JPEG、GIF等。 const Image({super.key,required this.image,this.frameBuilder,this.loadingBuilder,th…

社区电商系统源码之卷轴模式:商业模式分析

随着互联网技术的发展&#xff0c;电商平台的竞争日益激烈&#xff0c;如何留住用户并提升用户粘性成为了各大电商平台关注的重点。卷轴模式作为一种新兴的用户参与和激励机制&#xff0c;在社区电商系统中得到了广泛的应用。本文将从技术角度探讨卷轴模式在社区电商系统中的实…

数据分析:R语言计算XGBoost线性回归模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据数据预处理函数模型介绍 SHAP(SHapley Additive exPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,…

第10讲 后端2

主要目标&#xff1a;理解滑动窗口法、位姿图优化、带IMU紧耦合的优化、掌握g2o位姿图。 第9讲介绍了以为BA为主的图优化。BA能精确优化每个相机位姿与特征点位置。不过在更大的场景中&#xff0c;大量特征点的存在会严重降低计算效率&#xff0c;导致计算量越来越大&#xff0…

3.8 串操作指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

2024 高教社杯 数学建模国赛 (C题)深度剖析|农作物的种植策略|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…

ChauffeurNet:通过模仿最佳驾驶和合成最坏情况进行学习驾驶

ChauffeurNet: Learning to Drive by Imitating the Best and Synthesizing the Worst ChauffeurNet&#xff1a;通过模仿最佳驾驶和合成最坏情况进行学习驾驶 https://arxiv.org/abs/1812.03079 Abstract Our goal is to train a policy for autonomous driving via imit…

4000字三合一!Stata、SPSS、MATLAB实现多元线性回归详解!

参加数学建模的小伙伴要注意了&#xff1a;多元线性回归几乎是所有分析方式里面最核心、最常用、最全面的模型&#xff0c;博主本科大致参加了10次数模&#xff0c;还有一次正大杯市场调研赛&#xff0c;其中获得拿得出手的奖有9次&#xff0c;有5次都用到了多元线性回归——至…

分享7款实现社会实践报告AI生成论文网站

在当今社会&#xff0c;AI技术的快速发展极大地改变了我们的生活方式和工作方式。特别是在学术研究和写作领域&#xff0c;AI工具的应用已经变得越来越普遍。本文将详细介绍7款实现社会实践报告AI生成的论文网站&#xff0c;并重点推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper…

Flink 1.14.*中flatMap,filter等基本转换函数源码

这里以flatMap&#xff0c;filter为例&#xff0c;介绍Flink如果要实现这些基本转换需要实现哪些接口&#xff0c;Flink运行时调用这些实现类的入口&#xff0c;这些基本转换函数之间的类关系 一、创建基本转换函数需要实现类继承AbstractRichFunction并实现特性接口1、RichFla…

批量为某跟空间下的pod添加env(例如标签)

1、修改kube-apiserver配置文件&#xff0c;添加PodNodeSelector参数&#xff1a; –enable-admission-pluginsPodNodeSelector # 多个参数&#xff0c;则用逗号隔开systemctl daemon-reload systemctl restart kube-apiserver 2、修改指定命名空间内容&#xff1a; kubec…