HQL基础语法
Hive中的语句叫做HQL语句,是一种类似SQL的语句,基本上和SQL相同但是某些地方也是有很大的区别.
数据库操作
创建数据库
-
1.创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/*.db。
create database hive01;
-
避免要创建的数据库已经存在错误,增加if not exists判断。(标准写法)
create database if not exists hive01;
-
创建数据库指定位置
create database if not exists hive01 location '/hive01.db';
修改数据库
用户可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
alter database hive01 set dbproperties('createtime'='20220727');
查看数据库
-
显示所有数据库
show databases;
-
显示数据库使用like过滤
show databases like 'h*';
-
查看数据库详情
desc database hive01; describe database extended hive01 ; -- 带属性
-
切换数据库
use hive01;
删除数据库
-
最简写法
drop database hive01;
-
如果删除的数据库不存在,最好使用if exists判断数据库是否存在。否则会报错:FAILED:SemanticException [Error 10072]: Database does not exist: db_hive
drop database if exists hive01;
-
如果数据库不为空,使用cascade命令进行强制删除
drop database if exists hive01 cascade;
Hive数据类型
Hive数据类型指的是表中列的字段类型;
整体分为两类︰原生数据类型( primitive data type)和复杂数据类型( complex data type ) 。
原生数据类型包括:数值类型、时间日期类型、字符串类型、杂项数据类型.
复杂数据类型包括:array数组、map映射、struct结构.
4.2.1 原生数据类型
Java数据类型 | Hive数据类型 | 长度 |
---|---|---|
byte | TINYINT | 8位有符号整型。取值范围:-128~127。 |
short | SMALLINT | 16位有符号整型。取值范围:-32768~32767。 |
int | INT | 32位有符号整型。取值范围:-2 31 ~2 31 -1。 |
long | BIGINT | 64位有符号整型。取值范围:-2 63 +1~2 63 -1。 |
boolean | BOOLEAN | 布尔类型,true或者false |
float | FLOAT | 单精度浮点数 |
double | DOUBLE | 双精度浮点数 |
varchar(n) | 变长字符类型,n为长度。取值范围:1~65535。 | |
char(n) | 固定长度字符类型,n为长度。最大取值255 | |
String | string | 字符串类型 |
DATE | 日期类型,格式为 yyyy-mm-dd . | |
DATETIME | 日期时间类型。 精确到毫秒 | |
TIMESTAMP | 时间戳 |
对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。
隐式类型转换
-
与标准SQL类似,HQL支持隐式和显式类型转换。
-
原生类型从窄类型到宽类型的转换称为隐式转换,反之,则不允许。
-
下表描述了类型之间允许的隐式转换∶
-
强制类型转换
使用CAST函数 cast(数据 as 新类型)
select cast( '100' as double); 会将100字符串转换为100整数值。 如果强制转换失败,例如select cast ('aa' as int );,该函数返回NULL。
4.2.2 复杂数据类型
类型 | 定义 | 演示 |
---|---|---|
Array | array<int> | array(1,2,3,4) |
Map | map<string, string> | map("k1","v1","k2","v2") |
Struct | struct<x:int, y:int> | named_struct(‘x’:1, 'y’:2) |
Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。
数据库表基本操作
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 分区 [CLUSTERED BY (col_name, col_name, ...) 分桶 [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT DELIMITED | SERDE serde_name WITH SERDEPROPERTIES(property_name=property_value,..)] [STORED AS file_format] [LOCATION hdfs_path] [] 中括号的语法表示可选。 | 表示使用的时候,左右语法二选一。 建表语句中的语法顺序要和语法树中顺序保持一致。 字段简单说明 - CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项 来忽略这个异常。 - EXTERNAL 外部表 - COMMENT: 为表和列添加注释。 - PARTITIONED BY 创建分区表 - CLUSTERED BY 创建分桶表 - SORTED BY 排序不常用 - ROW FORMAT DELIMITED 使用默认序列化LazySimpleSerDe 进行指定分隔符 - SERDE 使用其他序列化类 读取文件 - STORED AS 指定文件存储类型 - LOCATION 指定表在HDFS上的存储位置。 - LIKE 允许用户复制现有的表结构,但是不复制数据