全网最细之HiveQL语句操作

2023-11-06

HiveQL语句操作

关键字尽量大写 但是本人小写容易记忆 所以本篇为小写

--------------------------------------------------------------------------

数据库

下方数据库名统一为:db (我难得打中文)

创建一个数据库

#创建一个数据库,在HDFS上的默认路径为user/hive/warehouse/*.db
create database db;
#可以用 if  exists 判断是否存在(存在则不创建)
create database if not exists db;
#创建一个数据库 指定存放的路径  这里我使用的是自己的存放路径
create database db location "/user/hive/warehouse";
# 

查看数据库

#显示所有数据库
show databases;
--模糊搜索
show database like 'it*';
--查看信息
desc database db;
--查看`详细信息` 信息
desc database extended db;
--切换当前数据库
use db

修改数据库信息

可以修改一些附加的信息,但是不能修改元数据信息

--给数据库添加信息
alter database db set dbproperties("createtime"="2022-04-20");

删除数据库

--删除一个 空的!!! 数据库
drop database db;
--还是最好用if exists 判断是否存在
drop database if exists db;
--如果数据库不为空 可以选择使用 cascade 强制删除
drop database db cascade;

--------------------------------------------------------------------------

普通表

老规矩 表名为: tb

创建表

--创建一张表
create table tb(id int,name string);
--创建一张外部表
create external tb(id int,name string);
--创建表并设置表中数据的分隔符(以制表符为例)
--复制代码时候 记得把注释删了
create table tb(
	name string,
	friends array<string>,
	children map<string, int>,
	address struct<street:string, city:string>
)
row format delimited 
fields terminated by ','   /* 列分隔符 */
collection items terminated by '_'         /*  MAP STRUCT 和 ARRAY 的分隔符(数据分割
符号)  */
NUll defined as '' 数据中有空值的时候需要转换为hdfs识别的到的 null 
map keys terminated by ':'    /* MAP 中的 key 与 value 的分隔符    */
lines terminated by '\n'       /* 行分隔符  */
stored as textfile;      /*存储格式*/

在这里插入图片描述

查看表

--查看表
>1desc tb
>--查看详细信息
>2desc formatted tb

修改表名

>alter table 旧表名 rename to  新表名

添加n列

>1、一次增加一个列(默认添加为最后一列,分区字段之前,用逗号风格多列)
alter table table_name add columns (new_col INT); 
2、可以一次增加多个列
alter table table_name add columns (c1 INT,c2 STRING); 
3、添加一列并增加列字段注释
alter table table_name add columns (new_col INT  comment 'a comment');

修改表

修改位置

>将列a1的名称更改为a2,将其数据类型更改为字符串,并将其放在列b之后:
alter table testa change a1 a2 string   after b;
>放在第一排
>alter table testa change a2 a3 string first;

>注意:
>列位置更换后数据位置还是不动的,`若想让数据跟着字段一起移动,需更新表数据,`
使用`insert overwrite table` 从表中将移动之前对应的数据插入到移动之后对应的字段中

单独修改列名 数据类型

>alter table 表名 change column   原列名  新列名  新数据类型

替换列

会删除原来的所有列,也就是把所有的列替换为一个字段

>alter table 表名 replace columns (列名 数据类型)

删除n个字段

alter table tb drop column id,drop column name;

修改表的注释

>alter table testa set tblproperties( "comment" = "new comment"  )

删除表

>1drop table 表名
>--purge 强制删除 就是放在最后面
>2:drop table 表名 purge  

清空表数据

truncate table tb;	

内部表(管理表)和 外部表

两者的区别

删除时,内部表会把元数据和具体数据都删除,但是外部表只会删除元数据

相互转换

注意:这里你第一眼会很眼熟,切记!!要大写大写大写!不然就是加附加信息了!
其实就是 external 等于 true或者false

--转换为外部表
alter table tb   set tblproperties('EXTERNAL'='TRUE');
--转换为内部表
alter table tb set tblproperties('EXTERNAL'='FAlSE');

--------------------------------------------------------------------------

分区表

分区是HDFS上对应一个独立的文件夹,属于元数据,但用法相当于一个字段,可以用来过滤
数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区。水平分区是对表进行行分区。而垂直分区是对列进行分区,一般是通过对表的垂直划分来减少目标表的宽度,常用的是水平分区.

创建分区表

1:分区字段不能和表字段重名
2::一但创建了分区字段,就无法进行修改和添加

--创建一个表,并设置以moth字段分区
create table student(id int,name string)
partitioned by(month string);
--二级分区也即使多级文件夹
create table student(id int,name string)
pertitioned by(month string,day string);

显示所有分区

show partitions tb;

添加分区

--往分区字段表里添加一个分区
alter table student add partition(month='202003')
--往分区里面添加多个分区(用空格分隔)
alter table student add partition(month='2022') 	partition(month='2023');

往分区里面添加数据

--加上 partition() 指定分区
load data local inpath'/opt/file.txt' into table tb partition(month='202003');
insert into table tb partition(month='202003') values('4','20');
****************************************************************************
load data [local] inpath '数据的 path' [overwrite] 

into table   tablename  [partition (partcol1=val1,)];

查询分区

select * from tb where month='202003';
select * from tb where month='202003' and day='20';

删除分区

--删除一个分区的表里面的分区
alter table tb drop partition(month='202003');
--删除分区表里面的多个分区(以逗号分隔)
alter table tb drop partition(month='202003'),partition(month='202004');

修复分区

如果数据是通过HDFS直接上传到分区目录,如果分区没定义,则会查询不到刚上传的数据

-- 修复命令
msck repair table student;
-- 也可以直接让此目录成为分区目录(这里以month='20200316'为例)
alter table student add partition(month='20200316');

移动分区

移动分区可以将分区表A中的表移动到具有相同结构的分区表B中,值得注意的是表B中不能存在表A中要移动的分区

-- 移动分区
--语法
alter table 表名>被插入的表 exchange partition(分区名) with table 表名>提供分区的表
--例子
--将表a的二级分区province=HuBei/city=WuHan移动分区表b中:
alter table b exchange partition (province=HuBei,city=WuHan) with table a

--------------------------------------------------------------------------

分桶表

什么是分桶表?

分桶是将数据集分解成更容易管理的若干部分的一个技术,是比表或分区更为细粒度的数据范围划分。针对某一列进行桶的组织,对列值哈希,然后除以桶的个数求余,决定将该条记录存放到哪个桶中。

常用于:

  • 获得更高的查询处理效率
  • 抽样调查

分桶表和分区表的区别

分区表提供了一个隔离数据和优化查询的便利方式。但是在实际场景下,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive还可以进一步组织成桶,也就是更为细粒度的数据范围划分。

小结一波:

  1. 分桶对数据的处理比分区更加细粒度化;
  2. 分桶和分区两者不干扰,可以把分区表进一步分桶;
  3. 分区针对的是数据的存储路径;分桶针对的是数据文件。

创建分桶表

create table test_bucket (
id int comment 'ID', 
name string comment '名字'
)
clustered by(id) into 4 buckets


查看分桶表

desc formatted test_bucket;

--------------------------------------------------------------------------

临时表

作为临时表创建的表将只对当前会话可见。数据将存储在用户的scratch目录(临时目录)中,并在会话结束时删除

如果用数据库中已经存在的永久表的数据库/表名创建了一个临时表,那么在该会话中,对该表的任何引用都将解析为临时表,而不是永久表。如果不删除临时表或将其重命名为不冲突的名称,用户将无法在该会话中访问原始表。

临时表存在如下限制:

  • 不支持分区列
  • 不支持创建索引

Hive的临时表在数据加载的过程中会频繁使用到,对于复杂的业务逻辑,可以将数据先存储在临时表,然后再从临时表取值进行进一步计算。

创建临时表

create table temporary temporary1(id int,name string);

--------------------------------------------------------------------------

视图

在 Hive 中可以使用 CREATE VIEW 创建视图,如果已存在具有相同名称的表或视图,则会抛出异常,建议使用 IF NOT EXISTS 预做判断。在使用视图时候需要注意以下事项:

  1. 视图是只读的,不能用作 LOAD / INSERT / ALTER 的目标;
  2. 在创建视图的时候,视图就已经固定,对基表的后续更改(如添加列)将不会反映在视图;
  3. 删除基表并不会删除视图,需要手动删除视图;
  4. 视图可能包含 ORDER BY 和 LIMIT 子句。如果引用视图的查询语句也包含这类子句,其执行优先级低于视图对应字句。例如,视图 custom_view 指定 LIMIT 5,查询语句为 select * from custom_view LIMIT 10,此时结果最多返回 5 行。
  5. 创建视图时,如果未提供列名,则将从 SELECT 语句中自动派生列名;
  6. 创建视图时,如果 SELECT 语句中包含其他表达式,例如 x + y,则列名称将以_C0,_C1 等形式生成;

视图的创建

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name   -- 视图名称
  [(column_name [COMMENT column_comment], ...) ]    --列名
  [COMMENT view_comment]  --视图注释
  [TBLPROPERTIES (property_name = property_value, ...)]  --额外信息
  AS SELECT ...;

create view if not exists 数据库名.视图名
字段名  字段注释   --可选
comment 视图注释
tblproperties (注释名=注释值)
as select 用于指定查询的语句

查看视图

--查看视图
desc 视图名;
--查看详细信息
desc  formatted 视图名;
--查看数据库中的视图
show views;

修改视图属性

alter view viewname set tblproperties(property1=propervalue1,property2=propervalue2,。。。。);

修改视图

alter view viewname as 新的查询;

删除视图

drop view if not exists 视图名;

--------------------------------------------------------------------------

索引

创建索引

CREATE INDEX index_name     --索引名称
  ON TABLE base_table_name (col_name, ...)  --建立索引的列
  AS index_type    --索引类型
  [WITH DEFERRED REBUILD]    --重建索引
  [IDXPROPERTIES (property_name=property_value, ...)]  --索引额外属性
  [IN TABLE index_table_name]    --索引表的名字
  [
     [ ROW FORMAT ...] STORED AS ...  
     | STORED BY ...
  ]   --索引表行分隔符 、 存储格式
  [LOCATION hdfs_path]  --索引表存储位置
  [TBLPROPERTIES (...)]   --索引表表属性
  [COMMENT "index comment"];  --索引注释
  
  --简写↓
create index index_name on table 建立索引的表(表的字段)
as 索引的类型       
[with deferred rebuild]    --可选
[indexproperties(property_name1=property_value,....)]   --索引额外属性 可选 
[in table 自定义我们索引表的名字]     --可选

[
	row format ... stored as ... stored by          --行分隔符、存储格式  可选
]
[location hdfs上的路径]   --可选
[tblproperties (...)]    --可选
[comment 'this is indextable']  -- 索引注释 可选

查看索引

show [formatted]  表名

重建索引

在这里插入代码片

删除索引

drop index 索引名;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全网最细之HiveQL语句操作 的相关文章

随机推荐

  • 目前国内制造业数字化转型的成效如何?

    先来分享一个数字 埃森哲与国家工业信息安全发展研究中心推出的 2020中国企业数字转型指数研究 显示 2020年我国数字化转型效果显著的企业只有11 埃森哲与国家工业信息安全发展研究中心推出的 2021中国企业数字转型指数研究 显示 202
  • Java提高篇-----TreeMap

    TreeMap的实现是红黑树算法的实现 所以要了解TreeMap就必须对红黑树有一定的了解 其实这篇博文的名字叫做 根据红黑树的算法来分析TreeMap的实现 但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好 通过这篇博
  • DevOps 学习(二)-DevOps 的工具链工具链

    DevOps 的工具链 DevOps中包括版本控制 协作开发工具 自动化构建和测试工具 持续集成 交付工具 部署工具 维护工具 监控 警告 分析工具等等 补充了一些国内的服务 可以让你更好的执行实施 DevOps 工作流 版本控制 协作开发
  • C语言 字符串 统计字串子母串出现的次数

    include
  • 定位算法启动流程

    工作空间humble ws 一 安装定位激光驱动 https github com RoboSense LiDAR rslidar sdk cd humble ws src 将rslidar sdk和rslidar msg包git到src目
  • 微信消息订阅功能开发流程

    一 可实现订阅消息推送 1 服务号 a 创建服务号类型的公众号并进行认证 认证的流程 补充公司营业执照相关信息 公司对公账号打款 三方电话认证等 以及300元认证费 b 申请模板消息功能 c 添加消息模板 d 添加模板消息发送接口 1 获取
  • minio 安装流程(linux)

    一 下载安装文件 1 在home目录下创建minio文件夹 mkdir home minio 2 进入 home minio 文件夹 cd home minio 3 下载文件 wget https dl minio org cn serve
  • 14LinuxC线程学习之查看当前pthread库版本和线程使用的注意事项(重要)

    1 查看当前pthread库版本 1 查看当前pthread库版本 getconf GNU LIBPTHREAD VERSION 2 NPTL名词了解 NPTL实现机制 POSIX Native POSIX Thread Library 3
  • VS2019/VS2022移动安装位置/C盘瘦身的一个好方法,亲测有效

    下面是vs2019 VS2022更换安装位置的方法 如果已经安装 未安装一样创建链接即可 不需要剪切文件这一步 方法类似 将安装好的文件剪切到其他盘 然后mklink链接即可 通过上面方法 我的VS2019跟VS2022一起安装了 都在使用
  • java8之stream流之Collector和Collectors

    Collector Collector是专门用来作为Stream的collect方法的参数的 public interface Stream
  • STM32程序调试技巧

    Table of Contents 前言 调试原理 软件调试 硬件调试 前言 这一篇博客主要讲解STM32F1开发板如何进行调试 分别是硬件调试 STLINK 调试和软件调试 调试原理 STM32的调试原理核心是比较复杂的 但是我们了解的东
  • 学习笔记——概率论与数理统计(第八章)

    学习笔记 概率论与数理统计 第八章 第八章 假设检验 8 1 基本概念 8 1 1 假设检验问题 8 1 2 假设检验基本概念 8 1 3 假设检验的思想与步骤 思想 步骤 8 1 4 两类错误 8 2 一个正态总体的参数假设检验 8 2
  • React官方中文文档【安装】

    https reactjs org docs getting started html React官方文档地址 1 入门 此页面是React文档和相关资源的概述 React是一个用于构建用户界面的JavaScript库 在我们的主页或教程中
  • Android 导入library,手把手教学

    引言 导入封装好的功能工程在自己的工程上 等于直接 给自己的工程上一件 装备 提升实力 PS 我曾经代入别人的工程 并实现了主工程 Application 和导入工程 library 的界面跳转与函数的调用 其中有各种各样的困难和错误 所以
  • Intel MKL 稀疏矩阵求解PARDISO 函数

    Intel MKL提供了针对稀疏矩阵求解的PARDISO 接口 它是在共享内存机器上 实现的稀疏矩阵的直接求解方法 对于一些大规模的计算问题 PARDISO的算法表现了非常好的计算效率与并行性 一些数值测试表明 随着计算节点数目增加 PAR
  • 超详细的VsCode创建SpringBoot项目(图文并茂)

    文章目录 超详细的VsCode创建SpringBoot项目 图文并茂 一 安装jdk 1 OpenJDK 2 Java SE Development Kit 8 二 安装maven 1 下载 2 配置环境变量 可选 3 修改settings
  • Python UI自动化 —— 关键字+excel表格数据驱动

    步骤 1 对selenium进行二次封装 创建关键字的库 2 准备一个表格文件来写入所有测试用例步骤 3 对表格内容进行读取 使用映射关系来对用例进行调用执行 4 执行用例 1 对selenium进行二次封装 创建关键字的库 from ti
  • java自定义高效map转json逻辑实现

    场景 笔者发现后端对网页提供的json接口数据 都不是特别复杂 所以为了提高json的转换效率 在笔者自己写的struts 1 0 0框架里 自主实现了一个map转json的类 内部返回值都是map封装 效率非常高 基本不会超过1ms 望大
  • win10——‘’WLAN‘’没有有效的IP配置

    前言 小编的笔记本最近突然连不上无线网了 本来用的好好的 突然不能用了 有点不得劲 不得劲就得给他搞得劲了 先看看小编的错误 然后再给您展示我的解决方案 错误提示 连不上网很难受 但是解决了肯定很爽 由于小编也没有遇到过这个问题 所以小编就
  • 全网最细之HiveQL语句操作

    HiveQL语句操作 关键字尽量大写 但是本人小写容易记忆 所以本篇为小写 数据库 创建一个数据库 查看数据库 修改数据库信息 删除数据库 普通表 创建表 查看表 修改表名 添加n列 修改表 修改位置 单独修改列名 数据类型 替换列 删除n