Hive 笔记

本质:

一个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语句

  • 自动转换表

1710949777771.png

转换规则 找到参与计算二者能转换为最小的数据类型 例子:

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)]

Comment