当前位置: 首页 > news >正文

【Hive入门】

之前实习写的笔记,上传留个备份。

1. 使用docker-compose快速搭建Hive集群

使用docker快速配置Hive环境

  • 拉取镜像

2. Hive数据类型

  • 隐式转换:窄的可以向宽的转换
  • 显式转换:cast

3. Hive读写文件

  • SerDe:序列化(对象转为字节码)、反序列化
3.1 hive读写文件流程
  • 反序列化(将文件映射为表)

    调用inputFormat,转为<key,value>类型,然后进行反序列化。

3.2 SerDe语法
  1. row format 指定序列化方式和分割符

    • Delimited:默认序列化方式
    • Json:改变序列化方式
  2. hive 默认分割符"\001"

4. 存储路径

  • 默认存储:/usr/hive/warehouse
  • 指定存储路径:location hdfs_path

5. 练习

创建表并加载数据。

use ods;
create external table hero_info_1(id bigint comment "ID",name string comment "英雄名称",hp_max bigint comment "最大生命"
) comment "王者荣耀信息"
row format delimited
fields terminated by "\t";

将文件上传到相应路径,只要指定好分割符就可以。

hadoop fs -put test1.txt /usr/hive/warehouse/test.db/hero_info_1
  • map类型
create table hero_info_2(id int comment "ID",name string comment "英雄名字",win_rate int comment "胜率",skin map<string, int> comment "皮肤:价格" -- 注意map分割类型
) comment "英雄皮肤表"
row format delimited
fields terminated by "," -- 指定字段分割符
collection items terminated by '-' -- 指定集合元素之间分割符
map keys terminated by ':'; -- 指定map元素kv之间的分割符
hadoop fs -put test2.txt /usr/hive/warehouse/test.db/hero_info_2

6. 指定路径使用

create table t_hero_info_3(id int comment "ID",name string comment "英雄名字",win_rate int comment "胜率",skin map<string, int> comment "皮肤:价格" -- 注意map分割类型
) comment "英雄皮肤表"
location "/tmp";select * from t_hero_info_3; 

7. 内部表和外部表

  • 外部表,删除不会删除hdfs文件

  • 一般都用外部表

drop table t_hero_info_3; -- 文件也被删除

9. 分区表

  • 上传多个文件

  • 发现sql执行很慢,因为where需要进行全表扫描,所以效率慢

  • 但是我们是根据射手类型来进行分类的,因此可以只扫描这一个分区的数据

  • 分区字段不能是表中已经存在的字段

create external table t_hero_info_1(id int comment "ID",name string comment "名字"
) comment "英雄信息"
partitioned by (role string)
row format delimited
fields terminated by "\t";
  • 静态分区
load data local inpath '/root/a.txt' into table t_hero_info_1 partition(role='sheshou');
​
​
-- 分区扫描 role是分区字段,不用全表扫描
select count(*) from t_hero_info_1 where role = "sheshou" and hp_max > 6000;

10. 多重分区表

  • 一般为双重分区表
create external table t_hero_info_1(id int comment "ID",name string comment "名字"
) comment "英雄信息"
partitioned by (province string, city string); -- 分区字段存在顺序-- 分区1
load data local inpath '/root/a.txt' into table t_hero_info_1 partition(province='beijing',city='chaoyang');
-- 分区2
load data local inpath '/root/b.txt' into table t_hero_info_1 partition(province='beijing',city='haidian');
-- 多重分区
load data local inpath '/root/b.txt' into table t_hero_info_1 partition(province='shanghai',city='pudong');

11. 动态分区

  • 根据字段值来进行动态分区,使用insert+select
  • 步骤:创建完分区表后,存在一个分区字段role,这时我们使用insert+select方法将原先表的数据插入到分区表中。
-- 原始数据表 t_all_hero
-- 分区表 t_all_hero_part-- role这里是分区字段,role_main是我们给指定的分区类型
insert into table t_all_hero_part partition(role) select tmp.*, tmp.role_main from t_all_hero tmp;
  • 在企业中,一般根据日期来进行分区表。
  • 注意:分区的字段不能是已有的字段,即字段名字不能重复
  • 分区的字段是个虚拟的字段,并不存在于底层当中

12. 分桶表

  • 来进行优化查询

  • 分桶是将一个文件分为若干个文件

规则
  • 将文件中数据哈希,从而分到不同桶中。

  • 一般是根据主键来进行分桶

  • 创建一个普通的表,然后上传数据;通过inset+select来加载分桶

-- 创建分桶表
create table test.t_state_info()
clustered by(state) into 5 buckets; -- state一定是表中已有的字段-- 插入数据
insert into t_state_info_bucket select * from t_state_info;
好处
  1. 可以基于分桶字段来查找,不需要进行全表过滤

  2. join时减少笛卡尔积数量

    窗口函数

    • over后返回的表行数不变

解析json

get_json_object:一次只能解析一个字段

http://www.xdnf.cn/news/867673.html

相关文章:

  • 【网络】select、poll和epoll模型的区别
  • Kafka broker 写消息的过程
  • 突破数据孤岛:StarRocks联邦查询实战指南
  • C语言中易混淆问题【数组指针与指针数组详解】
  • C++内存列传之RAII宇宙:智能指针
  • C#入门学习笔记 #7(传值/引用/输出/数组/具名/可选参数、扩展方法(this参数))
  • WPF可拖拽ListView
  • 质检 LIMS 系统数据防护指南 三级等保认证与金融级加密方案设计
  • 英国2025年战略防御评估报告:网络与电磁域成现代战争核心
  • Axios 取消请求的演进:CancelToken vs. AbortController
  • 【读代码】从预训练到后训练:解锁语言模型推理潜能——Xiaomi MiMo项目深度解析
  • 【android bluetooth 协议分析 12】【A2DP详解 2】【开启ble扫描-蓝牙音乐卡顿分析】
  • 光伏防逆流控制方案
  • .NET Core接口IServiceProvider
  • Spring Boot MVC自动配置与Web应用开发详解
  • Asp.net Core 通过依赖注入的方式获取用户
  • 全志A40i android7.1 调试信息打印串口由uart0改为uart3
  • 六种高阶微分方程的特解(原创:daode3056)
  • Java观察者模式深度解析:构建松耦合事件驱动系统的艺术
  • NC28 最小覆盖子串【牛客网】
  • 基于Axure+墨刀设计的电梯管理系统云台ERP的中保真原型图
  • Apache APISIX
  • CMake入门:3、变量操作 set 和 list
  • 深度学习项目之RT-DETR训练自己数据集
  • 通过模型文件估算模型参数量大小
  • Flask框架详解:轻量高效的Python Web开发利器
  • 深入解析Oracle SQL调优健康检查工具(SQLHC):从原理到实战优化
  • intense-rp-api开源程序是一个具有直观可视化界面的 API,可以将 DeepSeek 非正式地集成到 SillyTavern 中
  • Windows系统工具:WinToolsPlus 之 SQL Server Suspect/质疑/置疑/可疑/单用户等 修复
  • stress 服务器压力测试的工具学习