Hive数据库及表操作
Hive数据库及表操作
一、基本数据类型
数据类型 | |
---|---|
整数 | tinyint、smallint、int、bigint |
小数 | float、double、decimal |
文本 | string、char、varchar |
布尔 | boolean |
二进制 | binary |
时间 | date、timestamp、interval |
💡上述都是对Java接口地实现,具体行为与Java对应的数据类型完全一致。
(一)整数类型
类型 | 字节范围 | 对应Java | 后缀 | 例子 |
---|---|---|---|---|
tinyint | (-27,27-1) | byte | Y | 100Y |
smallint | (-215,215-1) | short | S | 100S |
int | (-231,231-1) | int | \ | \ |
bigint | (-263,263-1) | long | L | 100L |
(二)小数类型
小数也称浮点类型,包括 float(32位)、double(64位),还可使用decimal来表示任意精度的小数。
(三)文本类型
字符串类型 | 长度 |
---|---|
string | 2GB |
varchar | (1~65355) |
char | 最大固定为255 |
💡注意:
VARCHAR(20)与CHAR(20)的区别,如果输入字符长度为10,那么VARCHAR(20)实际长度为10,而CHAR(20)仍为20,未用的空间用空格填充。
(四)时间类型
unix_timestamp()
#得到当前时间戳
unix_timestamp()
#将yyyy-mm-dd hh:mm:ss格式的字符串转为时间戳
unix_timestamp(string_date)
#将指定字符串转换为指定格式的时间戳
unix_timestamp(string_date,string format)
from_unixtime():将指定时间戳以指定格式显示
cast():在timestamp、date和string类型之间做转换
二、复杂数据类型
数据类型 | ||
---|---|---|
map | (key-value)键值对类型。 | map.get()#根据k找v k for k,v in d.items() if v == value#根据v找k |
array | 数组类型,array 中存放相同类型的数据 | |
struct | 集合类型 | |
uniontype | 在同一时间点,保持恰好有一个指定的数据类型。类Java泛型 |
Java数据类型
基本数据类型:整型、浮点型、字符型、布尔型
引用数据类型:接口(interface)、数组([ ])、类(class)
三、Hive DDL操作
(一)数据库操作
创建数据库
create database name;
切换库
use name;
查看库列表
show databases;
查看正在使用的库
select current_database();
删除库
#只能删除空的
drop database name;
#严格模式下的删除库 会进行库的检查 如果库不是空的不允许删除
drop database name restrict;
#删除非空数据库 级联删除
drop database name cascade;
(二)表的操作
#创建表
CREATE [external] TABLE table_name(
[col_name] data_type,
[col_name] data_type,
[col_name] data_type)
#分区
partitioned by(date string )
#以逗号作分隔符
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
(三)内部表&外部表
对比项 | 内部表 | 外部表 |
---|---|---|
Hive 管理范围建表语句 | 元数据、实际的表数据 | 元数据 |
建表语句 | 不需要 external 关键字修饰 | 需要 external 关键字修饰 |
drop 表后果 | 删除元数据和实际的表数据 | 只删除元数据,实际的表数据保留 |
存储路径 | 一般在默认位置存储数据 | 一般搭配 location 指定数据存放位置 |
表结构和分区更改的区别 | 自动同步到元数据 | 需要修复表 |
四、Hive DML操作
(一)数据装载与插入
1、load
-- 加载本地文件
load data local inpath '/home/hadoop/load1.txt' into table tb_load1;
-- 加载HDFS文件
load data inpath '/hive/test/load2.txt' into table tb_load1;
-- 加载分区数据
load data inpath '/hive/test/load_part_male.txt' into table tb_load2
partition (sex='male');
--使用overwrite:会覆盖之前的数据
load data local inpath '/home/hadoop/load3.txt' overwrite into table tb_load1;
(2)insert
--将cite表中的数据复制一份,然后插入到原表中
insert into table cite select * from cite;
--用tt表查出来的数据overwrite(覆盖)掉cite表格中已经存在的数据
insert overwrite table cite select * from tt;
2、数据导入/导出
(1)export
export table users to '/user/hive/warehouse/export';
#export导出的数据,里面包含了具体数据和元数据
(2)import
IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]
FROM 'source_path' [LOCATION 'import_target_path']
source_path:表示导入的文件所在路径。
export和import主要用于两个Hadoop平台集群之间Hive表迁移,不能直接导出的本地。
本文作者:Lilaaa
本文链接:https://www.cnblogs.com/lila720/articles/18273844
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步