「这是我参与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
保存数据库名
| id | name | |
|---|---|---|
| 1 | itcast | |
| 2 | python | |
保存所有表的名字
| name | id_pk | |
|---|---|---|
| tb_name | 1 | |
| tb_archer | 1 | |
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;