栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive的基本操作

Hive的基本操作

▌一、SQL的四种语句

▎【2.1】数据定义语言 DDL-data definition language

关键字如CREATE,DROp,ALTER定义数据库的逻辑结构,比如数据库、表、索引

▎【2.2】数据查询语言DQL-data query languag

关键字如SELECT查询操作

▎【2.3】数据操纵语言DML-data manipulation language

关键字如INSERT,UPDATE,DELETE对数据库的数据数据进行操作

▎【2.4】数据控制功能DCL-data control language,关键字如GRANT,REVOKE,COMMIT,ROLLBACK,对数据库的权限和安全级别进行操作

▌二、创建操作 ▎【2.1】创建数据库
 create database bd1814 comment "" with dbproperties(key=value,key=value) 
//key和value都要以字符串的形式

Hive中创建「数据库」本质上就是在HDFS上创建了一个「文件夹(目录)」

 /usr/hive/warehouse 存储在hive中创建的数据库、表、数据

如果你用MySQL进行Hive元数据的存储,需要在MySQL中创建一个Hive数据库,相关的信息在hive-site.xml中进行设置,其中有很多表,存储了Hive元数据,其中一个表为DBS,其中记录了我们创建的所有数据库的元数据

▎【2.2】在原有数据库基础上添加信息的属性信息
 alter database 数据库名 set dbproperties('属性名'='属性值');
▎【2.3】创建表
 create [external] table if not exists 表名(列名 数据类型,列名 数据类型) location "";
 //一般情况下location可以指定表存在哪个位置的, 也可以获取数据的位置

Hive创建表的本质就是在HDFS相应的仓库路径下创建一个文件目录,文件目录的名字就是表名,向表中添加的数据不存储到数据库中,而是存储到HDFS中。

▏在Hive中表的类型有两种:

  • MANAGED_TABLE(内部表)
    表达目录会创建正在HDFS的仓库(/user/hive/warehouse)目录下
  • EXTERNAL_TABLE(外部表)
    外部表会根据创建表式location关键字指定的路径创建表
    若没有指定location,则表创建在和内部一样的路径下

▏Hive在创建表的时候会做两件事

  • 创建HDFS上相对应的表目录
  • 在元数据存储的数据库中存储对应表的元数据信息

▏内部表和外部表本质上是没有什么区别的,一旦发生drop的时候不同的特性就出现了

  • drop时,内部表的数据目录会被删除,但是外部表的数据目录不会被删除
  • drop时,内部表或外部表的元数据都会被删除

▏内部表和表和外部的转换

 alter table 表名 set tblproperties('EXTERNAL'='TRUE/false')
 ps :这里的TRUE一定要大写 false无所谓
 内表转外表
 alter table t_newuser set tblproperties('EXTERNAL'='TRUE')
 外表转内表
 alter table t_newuser set tblproperties('EXTERNAL'='false');
▎【2.4】创建表创建表时指定分隔
 create [external] table if not exists 表名(列名 数据类型,列名 数据类型) 
row format delimited fields terminated by 't'
▌三、查询操作

▎【3.1】查询hive中哪些数据库

 show databases;

在没有创建其他数据库之前,hive会提供一个默认的数据库给我们使用default ​ 在操作HiveQL在不指定数据库的前提下所有的操作都是在默认default数据中执行的 ​ hive的数据库名和表名不区分大小写

▎【3.2】查询数据库信息

desc database bd1814;
bd1814  hdfs://ip:9000/user/hive/warehouse/bd1814.db zxiao USER
如果我们想要看,我们使用with dbproperties添加的额外属性
desc database extended bd1814;
选中数据库
use 数据库名;
▌四、删除操作

▎【4.1】删除数据库

 drop database 数据库名 //只能删没有表的
 drop database 数据库名 cascade; //级联删除,都能删

▎【4.2】删除表

 drop table 表名;
▌五、加载数据

▎【5.1】本地加载

 load data local inpath '本地数据路径' into/[overwrite into] table 表名
 into关键字是追加 overwirter关键字是覆盖

本质上就是将文件加载到表对应的目录下

▎【5.2】HDFS加载

 load data inpath 'HDFS路径' into table 表名
 into关键字覆盖追加一体

▎【5.3】通过查询语句向表中添加数据

 insert into table 插入的表名 select * from 存有数据表
 into 是追加
 insert overwrite table 插入的表名 select * from 存有数据表
 overwriter 是覆盖

▎【5.4】Hive添加数据问题

hive使用是严格的「读时」模式。

在加载数据的时候是不检查数据的完整性。读时若发现数据的个格式不正确,此时就使用null来进行代替。

在hive创建表的时如果不指定数据中的分割符号,默认使用的是系统提供分割符号

▎【5.5】总结:

若是使用本地加载文件,相当于将文件拷贝一份并上传到HDFS下/user/hive/warehouse对应数据库下的表中存储中文件。

若使用HDFS加载文件,相当于将文件剪切到HDFS下/user/hive/warehouse对应数据库下的表中存储中文件。

▎【5.6】复制表

  • 使用like关键字
 复制的是分区的表也可以复制普通表
 复制表但是不带有数据 --> 复制一份表的结构
 create table if not exists t_4 like t_5;
 复制表并带有数据
 create table if not exists t_6 like t_5 location '/user/hive/warehouse/bd1814.db/t_5';

这个复制因我们使用location关键字,所以这里t_6并会不出现在HDFS的目录中 位置这里的t_6这张表和t_5这张表共享数据 我们所有正在hive下创建的数据库或表都是目录

  • 使用select进行复制
 通过有查询的形式复制 select * from
 ps:个人是非常推荐的 而且复制数据非常的灵活
 这种方式根创建表一样会有 元数据和目录都会被创建
 create table if not exists 要创建的表 as select * from 提供数据和表结构的表 where 添加条件;
 ps: where 可以不写 根据需求来
 create table if not exists t_7 as select * from t_user where uid>1;
▌六、表属性的修改 ▎【6.1】修改表明
 alter table 原表名 rename to 新表名

▎【6.2】修改列的名字或者是数据类型

 alter table 表名 change column 原字段名 新字段名 字段数据类型

▎【6.3】修改字段的顺序

 使用after关键字.将修改后的字段放到某个字段的后面
 alter table 表名 change column 原字段名 新字段名 字段数据类型 after 某个字段即可
 但是原始数据的顺序还是原来的顺序,所以,可能会发生解析错误

▎【6.4】添加字段

 alter table 表名 add columns (字段名 数据类型 ....);

▎【6.5】删除字段

 alter table 表名 replace columns(字段名,数据类型....);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号