本质:
一个Hadoop的客户端
Hive 表数据存在HDFS里
用户查询时 转为Mapreduce执行
架构
元数据(Metastore)
储存了表储存在什么位置、和一些表结构等等
默认是derby数据库 一般配置为 mysql
Hive客户端(Hive Client)
一般指储存在 $HIVE_HOME/bin/
中
用于用户在命令行操作hive
HiveServer2
提供 JDBC ODBC 用户认证等功能 接口
当用户要远程连接Hive时 就需要启动 HiveServer2
Hive Client
用户执行操作
metastore 模式
metastore 只提供元数据的访问接口
嵌入模式
在每个Hive Cli 和 Hiveserver2 中运行的进程
独立运行模式
所有HiveCLI、Hiveserver2 通过这个metastore进程连接元数据库
命令行工具
hive -e "SQL" # 直接执行 SQL
hive -f xxx.sql # 执行SQL文件
hive # 进入 交互命令行
DDL (Data Definition Language) 数据定义
数据库操作
创建库
CREATE DATABASE [IF NOT EXISTS] <database_name>
[COMMENT 备注]
[LOCATION HDFS位置]
[WITH DBPROPERTIES(详细信息)]
;
create database school;
# 更多详细
create database school with dbproperties('create_date'='2023-11-15');
查看数据库
SHOW DATABASES [LIKE '* |' ];
# LIKE 模糊查询 不填写默认查询全部
show databases; # 查看所有
# 选择性查看 db_开头的
show databases like db_*;
查看数据库信息
DESC DATABASE [extended] <database_name>
desc database student;
# 详细信息
desc database extended student;
修改数据库
数据库 可以改的内容
dbproperties 详细信息
location 路径
owner user 所有者
修改后不会影响到已有的表 只会影响新建的表的路径等*
ALTER DATABASE <database_name> SET DBPROPERTIES("key1"="value1"); # 修改详细信息
ALTER DATABASE <database_name> SET LOCATION "/usr/hive/"; # 修改路径
ALTER DATABASE <database_name> SET OWNER USER "root"; # 修改所有者
删除数据库
DROP DATABASE [IF EXISTS] <database_name> [RESTRICT|CASCADE]
RESTRICT 严格模式 不为空删除失败
CASCADE 级联模式 表库一起删
切换数据库
use <database_name>;
表操作
数据类型(常用的)
复杂数据类型
struct 类似于 python 的 dataclass 也可以理解为 scala 的 case class
类型转换
隐式转换
自动转换数据类型 无需修改sql语句
自动转换表
转换规则 找到参与计算二者能转换为最小的数据类型 例子:
select '1' + 1;
> 2
string int
类型为:double
显示转换
cast(expr as <type>)
select cast("123" as int) + 1;
> 124
类型为:int
创建表
1、完整新建
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] <table_name>
零时表 外部表 如果不存在 表名
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (key=value)]
外部表
只管理元数据
内部表
管理元数据和HDFS
Partitioned By
创建分区表
Clustered By … Sorted By … INTO … BUCKETS
创建分桶表
案例:
# 内部表
create table student(
id int,
name string
)
row format delimited fields terminated by '\t'
location "/usr/test/student"
# 外部表
create external table student(
id int,
name string
)
row format delimited fields terminated by '\t'
location "/usr/test/student"
2、CTAS (Create Table As Select)从查询中建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <table_name>
[COMMENT 注释]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (key=value)]
[AS select_statement]
3、CTL (Create Table Like) 从已有的表中复刻表结构
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] <table_name>
[LIKE <exists_table_name>]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (key=value)]