Hive知识

142 阅读4分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

hql语句形式

  • DDL
    • 库、表、视图 创建修改删除
    • create、alter、drop
  • DML
    • 表的具体数据的事务操作
      • 数据写入
      • 数据的修改
      • 数据的删除
  • DQL
    • 数据查询
    • from、where、group by、having 、聚合、select、order by,limit
  • DCL
    • 权限控制
      • grant
    • 用户创建修改

重点 创建数据操作和查询数据操作

HQL建表

  • 基本建表语句
create table tb_name(
    id int comment '订单id',
    total_price int
)

hive表的字段类型

  • 原生数据类型
    • 数值型
      • int
      • float
    • 字符型
      • string
    • 日期型
      • date
    • 布尔型
      • bool
  • 复杂数据数据类型
    • array 数组 []
    • map key-value
    • struct 结构体 { int ,string array}
    • 联合体

数据类型转换

  • 隐式转换
  • 显示转换 cast()

hive文件的读写

hadoo中的文件数据和hvie的表之间的关系

读文件 -- 将文件数据映射到表上---反序列化

zhangsan,lisi,wangwu

  • 将sql语句转化为mp程序,找到对应的数据文件,按照映射表指定的格式去切割获取数据,然后将数据安装指定的字段形式进行返回

写文件--将表上的数据写入文件 -- 序列化

  • 按照指定的的格式将数据写入文件

数据格式规范指定

规范在读写数据过程中按照指定格式操作数据

  • 字段间格式
    • 张三 王五
  • 集合元素之间的
    • zhangsan,gender:boy-age:18
  • map映射

Hive使用流程

先创建表,指定数据的处理形式后才能进行相应的数据操作

  • 创建表之后,在hdfs上会表名作为目录方便后续上传数据到表中
  • 表的数据是在HDFS上存储,表的元数据实在MySQL在中存储 hive-site.xml

保存数据库名

idname
1itcast
2python

保存所有表的名字

nameid_pk
tb_name1
tb_archer1

hive表的类型

  • 内部表
    • 一般是数据文件还没有上传仓库,需要提前创建表目录,让后将数据传入对应的表目录中
    • 默认情况下在没有指定external关键词情况下创建的都是内部表
    • 内部表管理元数据和表数据--一旦删除表之后,元数据和表数据全部清空
  • 外部表
    • 数据已经存在,对存在数仓上的数据建表后进行操作,由于存储位置不一致默认的存储位置,需要使用location指定数据存储位置路径
    • 外部表创建的关键词是external
    • 外部表只管理元数据,删除外部表不会把hdfs上的数据删除,只是把元数据删除
-- 内部表
create table student(
    id int,
    name string,
    sex string,
    age int ,
    dept string
)row format delimited
fields terminated by ',';
-- 查询
select * from student;
-- 删除
drop table student;

-- 外部表创建  location指定数据的位置  external创建外部表的关键
create external table student_ext(
    id int,
    name string,
    sex string,
    age int ,
    dept string
)row format delimited
fields terminated by ','
location '/stu';

select * from student_ext;
-- 删除
drop table student_ext;

分区表

分区可以将多个文件划分成不同文件目录,在进行查询是可以指定对应目录,直接到对应目录下完成数据的查询操做

  • partition by(分区字段,字段类型) 创建分区的关键词
  • 分区字段是虚拟字段不能和已经定义字段重复

分区表导入数据,根据导入数据方式不同,分区表可以分为静态表和动态表

  • 静态表数据导入
    • load add local inpath '路径--服务器上文件路径' into table 表名 partition(分区字段=‘名称’)
    • 静态导入需要手动的对数据进行分类导入
  • 动态表导入数据
    • inster into table 表名字 partition(分区字段) select * from tmp_table
    • hive根据指定的数据自动进行分区,生成对应的分区目录和数据

分桶表

字段层面对数据划分,划分的结果比分区表更加平均

根据字段的hash值除以指定分桶数量,然后对结果取余数,把余数相同的数据放在一起

  • CLUSTERED BY(state) sorted by (cases desc) INTO 5 BUCKETS;