Hive知识点梳理

📅 2026/7/2 3:10:19
Hive知识点梳理
概述Hive是基于Hadoop的数据仓库基础构架它利用简单的SQL语句(简称HQL)来查询、分析存储在HDFS中的数据并把SQL语句转换成MapReduce程序来进行数据的处理。( [6])hive数据仓库工具能将结构化的数据文件映射为一张数据库表并提供SQL查询功能能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低可以通过类似SQL语句实现快速MapReduce统计使MapReduce变得更加简单而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析配置 DBeaver连接Hive在 /opt 下创建 logs 目录编写脚本启动hive相关服务echo 启动metastore服务中.... nohup /opt/soft/hive/bin/hive --service metastore /opt/logs/hive.log 21 echo 启动hiveserver2服务中.... nohup /opt/soft/hive/bin/hive --service hiveserver2 /opt/logs/hive.log 21 if [ $? -eq 0 ] then echo 服务启动中.... 请等待大约2分钟 再使用 dbeaver 客户端连接 hive else echo 启动失败,请前往日志 /opt/logs/hive.log 查看 fi启动hive1. 启动 hdfs 集群和 yarn 集群 2. 启动hive的服务关闭hive服务kill -9 进程id测试Demo本地创建几个文件(放一列数据)在hive 建表(去MySQL数据库查看对应的元数据)上传数据 测试查询Hive 系统架构数据类型数据类型Hive 建表要求CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])] [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] [SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)] ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) [STORED AS DIRECTORIES] [ [ROW FORMAT row_format] [STORED AS file_format] | STORED BY storage.handler.class.name [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later) ] [LOCATION hdfs_path] [TBLPROPERTIES (property_nameproperty_value, ...)] -- (Note: Available in Hive 0.6.0 and later) [AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables) CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE existing_table_or_view_name [LOCATION hdfs_path]; data_type : primitive_type | array_type | map_type | struct_type | union_type -- (Note: Available in Hive 0.7.0 and later) primitive_type : TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later) | STRING | BINARY -- (Note: Available in Hive 0.8.0 and later) | TIMESTAMP -- (Note: Available in Hive 0.8.0 and later) | DECIMAL -- (Note: Available in Hive 0.11.0 and later) | DECIMAL(precision, scale) -- (Note: Available in Hive 0.13.0 and later) | DATE -- (Note: Available in Hive 0.12.0 and later) | VARCHAR -- (Note: Available in Hive 0.12.0 and later) | CHAR -- (Note: Available in Hive 0.13.0 and later) array_type : ARRAY data_type map_type : MAP primitive_type, data_type struct_type : STRUCT col_name : data_type [COMMENT col_comment], ... union_type : UNIONTYPE data_type, data_type, ... -- (Note: Available in Hive 0.7.0 and later) row_format : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char] -- (Note: Available in Hive 0.13 and later) | SERDE serde_name [WITH SERDEPROPERTIES (property_nameproperty_value, property_nameproperty_value, ...)] file_format: : SEQUENCEFILE | TEXTFILE -- (Default, depending on hive.default.fileformat configuration) | RCFILE -- (Note: Available in Hive 0.6.0 and later) | ORC -- (Note: Available in Hive 0.11.0 and later) | PARQUET -- (Note: Available in Hive 0.13.0 and later) | AVRO -- (Note: Available in Hive 0.14.0 and later) | JSONFILE -- (Note: Available in Hive 4.0.0 and later) | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname建表练习create table if not exists class94.stu (name string comment 姓名, course string comment 科目, score int comment 成绩) comment 学生考试成绩表 ROW FORMAT DELIMITED FIELDS TERMINATED BY ,常用操作-- 创建 数据库 create database class94 -- 切换数据库 use class94 -- 查看详细建表语句 show create table class94.stu -- 复制表结构 create table b like class94.stu -- 查看表的元数据 desc formatted b -- 查看数据库下有哪些表 show tables建表常用数据类型create table hero( id string, name string, friends arraystring, child mapstring,int, addr structsf:string,city:string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , COLLECTION ITEMS TERMINATED BY _ -- 集合元素之间的分隔符 MAP KEYS TERMINATED BY :;复杂类型取值-- 从数组中通过下标获取元素 select friends[0] from hero where namexxx --查找xxx的朋友 -- 从map 类型取值 select child[xxx] from hero where namexxx 查找xxx的孩子xxx信息 -- 从struct 取数 select addr.sf from heroHive 表类型内部表外部表分区表分桶表内部表 MANAGED_TABLE内部表完全(元数据[MySQL]数据文件[HDFS])由hive自己管理删除内部表, 会同时删除 元数据 数据文件外部表 EXTERNAL_TABLE外部表的元数据由hive 管理, 数据文件被HDFS 管理删除内部表, 只删除 元数据 , 数据文件保留相当于内部表比较安全内部表和外部表的区别对比维度内部表管理表外部表EXTERNAL创建关键字默认就是内部表可手动写MANAGED显式声明必须写CREATE EXTERNAL TABLE默认存储位置Hive 默认仓库/user/hive/warehouse/库名.db/表名自定义LOCATION指定任意 HDFS 路径DROP TABLE 表名删除行为删除表元数据 HDFS 真实数据文件一起彻底删除只删除 Hive 元数据DBeaver 看不到表HDFS 原始数据完整保留数据归属Hive 全权管理数据原始数据独立存在Hive 只是映射读取适用场景临时测试数据、中间计算结果、用完可一键清空原始业务明细、源头日志、重要不可删除数据生产推荐内外部表相互转换内转外ALTER TABLE 表名 SET TBLPROPERTIES(EXTERNALTRUE);外转内ALTER TABLE 表名 SET TBLPROPERTIES(EXTERNALFALSE);验证是否转换成功DESCRIBE EXTENDED 表名;分区表Hive 分区表是一种优化 Hive 查询方法用以提高查询性能。分区表通过将数据分散到不同的分区中使得查询仅分区数据而不是整个表从而减少了数据扫描的范围。create table trade ( city string, amt int ) partitioned by (sf string) -- 指定分区字段和类型 ROW FORMAT DELIMITED FIELDS TERMINATED BY , -- 添加分区方式1 alter table trade add partition(sfshandong) alter table trade add partition(sfhenan) select * from trade where sfshandong -- 添加分区方式2(常用方式) --将外部的分区文件夹和数据上传(put)到 表中, 该分区数据 没有 元数据 msck repair table trade -- 给分区添加 元数据