Hive学习----基本操作

本文介绍Hive的基础概念,包括数据库和表的结构、外部表与管理表的区别、表的创建及数据加载方法,并探讨Hive的使用方式,如Shell与Thrift服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Hive入门

hive中数据库和表都是目录,默认在hdfs的/user/hive/warehouse/下

 

在元数据库mysql中

2.简单操作

Hive表分为两类,外部表和管理表(或叫内部表)

区别:删除表结构时(drop table tableName),外部表数据保留,内部表数据也被删除

因为大数据开发,数据量很大,删除数据是很危险的操作,建议一般使用外部表

 

创建一张表,没做额外任何添加,默认TBL_TYPE=MANAGED_TABLE(管理表)

 

查看表结构

desc formatted tb1;

desc tb1;

 

添加一条记录,执行很慢,会走MapReduce过程

一般使用load

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

create table tb1(id int,name string) row format delimited fields terminated by ','

 

load data local inpath '/home/omc/students.txt' into table tb1;

相当于将本地文件students.txt上传到hdfs的hive仓库中

等价于下面的操作

--------------------------------------------------------------------------------------------------------------------------------

将students.txt上传到hdfs中

load data inpath '/wc/students.txt' into table tb1;

想当于把hdfs文件转移到数据仓库中

 

 

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

 

 

在hdfs上查看结果

 

此处结果文件有10个字符长度,其中默认分隔符(\001)占了两个

 

删除表后,hdfs上的数据也被删除

 

在hive中,可以直接查看hdfs上的信息(速度还要快点)

 

 

 

3.Hive使用方式

3.1  Hive交互式Shell

bin/hive

3.2  Hive Thrift服务

服务端:

把hive做为服务器来启动,其他客户端只要符合他的协议就可以远程连接hive

默认端口是10000

bin/hiveserver2

 

查看是否启动成功

netstat -anop | grep 10000

 

客户端:

hive里有个客户端(可以另外开一个窗口做为客户端)

bin/beeline

连接到服务端:!connect jdbc://hive2://192.168.0.131:10000

 

 

### 使用 Hive 进行 NBA 投篮数据分析的实战案例 #### 数据准备阶段 在进行 NBA 投篮数据分析之前,需要准备好数据集。通常可以从公开的数据源获取 NBA 的比赛记录和球员统计数据。这些数据可能包括每场比赛的时间、地点、参赛队伍以及每次投篮的具体信息(如位置、时间、得分情况等)。假设我们已经拥有了这样的数据并将其存储到 HDFS 中。 为了便于分析,可以创建一个表来保存投篮事件的相关字段。例如: ```sql CREATE TABLE IF NOT EXISTS nba_shots ( game_id STRING, player_name STRING, team_name STRING, shot_distance FLOAT, -- 投篮距离 shot_made_flag INT, -- 是否命中 (1 表示命中, 0 表示未命中) shot_type STRING, -- 投篮类型 (两分/三分) location_x FLOAT, -- X 坐标 location_y FLOAT -- Y 坐标 ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` 此 SQL 创建了一个名为 `nba_shots` 的外部表用于加载原始 CSV 文件[^2]。 #### 数据清洗与预处理 由于实际采集的数据可能存在缺失值或者异常值的情况,因此需要先对数据做初步清理工作。以下是几个常见的操作: - **过滤掉无效的比赛 ID** - **移除射程超过合理范围内的样本** 可以通过以下查询语句实现基本的数据筛选功能: ```sql INSERT OVERWRITE TABLE cleaned_nba_shots SELECT * FROM nba_shots WHERE game_id IS NOT NULL AND shot_distance BETWEEN 0 AND 30; -- 合理的距离区间设定为 0 到 30 英尺之间 ``` 这里定义了一张新的表格叫做 `cleaned_nba_shots` 来存放经过简单净化后的高质量数据集合[^3]。 #### 统计计算部分 一旦完成了前期准备工作,则可以根据业务需求设计各种指标来进行深入探索。下面列举了一些典型的例子供参考学习之用: ##### 计算每位选手平均有效投篮次数 通过聚合函数很容易得出每个运动员平均每场尝试了多少次成功的远距离射击动作。 ```sql SELECT player_name, AVG(shot_distance * shot_made_flag) as avg_effective_shot_attempts_per_game FROM cleaned_nba_shots GROUP BY player_name; ``` 这条命令会返回一份列表展示各个明星在整个赛季期间各自完成的有效出手频率状况如何变化趋势图谱[^4]。 ##### 探讨不同区域成功率差异对比研究 还可以进一步细分考察特定区域内进球率是否存在显著区别现象发生呢? ```sql WITH distance_bands AS ( SELECT *, CASE WHEN shot_distance < 8 THEN 'Close Range' WHEN shot_distance >=8 AND shot_distance<16 THEN 'Mid Range' ELSE 'Long Distance' END band_label FROM cleaned_nba_shots ) SELECT band_label, COUNT(*) total_attempts,SUM(shot_made_flag)/COUNT(*) success_rate FROM distance_bands GROUP BY band_label ORDER BY CAST(SUBSTR(band_label,-1)AS INTEGER); ``` 上述脚本首先利用 WITH 子句构建辅助视图表将整个球场划分为三个主要分区段落;接着再基于这个临时结构重新整理汇总得到各类别下的总体试炼数目及其对应的成功百分比例数值结果呈现出来给用户查看理解方便快捷直观明了[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值