黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念

简介: 黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念

1. 数据库操作

  • 创建数据库
create database if not exists myhive;
  • 查看数据库详细信息
desc database myhive;
  • 数据库本质上就是在HDFS之上的文件夹
  • 默认数据库的存放路径是HDFS的:/user/hive/warehouse内
  • 创建数据库并指定hdfs存储位置
create database myhive2 location '/myhive2';
  • 删除一个空数据库
drop database myhive;
  • 强制删除数据库
drop database myhive2 cascade;

2. 数据表操作

2.1 表操作语法和数据类型

2.2 内部表操作

  1. 内部表和外部表

内部表(CREATE TABLE table_name …)

未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse),删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。

外部表(CREATE EXTERNAL TABLE table_name …LOCATION…)

被external关键字修饰的即是外部表, 即关联表。

外部表是指表数据可以在任何位置,通过LOCATION关键字指定。 数据存储的不同也代表了这个表在理念是并不是Hive内部管理的,而是可以随意临时链接到外部数据上的。

  1. 内部表和外部表对比

  2. 创建内部表
  • 创建表
create table table_name……
  • 查看表的数据
  1. 自定义指定分隔符
create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t'; 
  1. 删除内部表
drop table table_name

2.3 外部表操作

  1. 创建外部表语法
  • create external table ……
  • 必须使用row format delimited fields terminated by指定列分隔符
  • 必须使用location指定数据路径
  1. 外部表和其数据相互独立
  • 可以先有表后有数据
  • 也可以先有数据,后有表
  • 表和数据只是一个链接关系
  • 所以删除表,表不存在了但数据保留。
  1. 内外部表转换
  • 内转外:stu set tblproperties(‘EXTERNAL’=‘TRUE’)
  • 外转内:stu set tblproperties(‘EXTERNAL’=‘FALSE’)

2.4 数据加载和导出

  1. 外部表是临时使用的,重要数据建议存入内部表进行管理
  2. 加载数据的语法
  • load data [local] inpath ‘filepath’ [overwrite] into table tablename;
  • insert into | overwrite select ……
  1. 注意事项
  • 数据来源本地,本地数据会保留,本质是本地文件上传到HDFS
  • 数据来自HDFS,加载后文件不存在,本质是在HDFS上进行文件移动
  1. Hive数据导出的方式
  • insert [local] select
  • bin/hive -e ‘SQL’ > file
  • bin/hive -f ‘sql file’ > file

2.5 分区表

  1. 分区表的定义
  • 可以选择字段作为表分区
  • 分区其实就是HDFS上的不同文件夹
  • 分区表可以极大的提高特定场景下Hive的操作性能
  1. 分区表的语法
  • create table tablename(…) partitioned by (分区列 列类型)
  • 分区表的分区列,在partitioned by中定义,不在普通列中定义

2.6 分桶表

  1. 分桶表定义
  • 可以选择字段作为分桶字段
  • 分桶表本质上是数据分开在不同的文件中
  • 分区和分桶可以同时使用
  1. 分桶表的语法
  • 通过clustered by(c_id) into 3 buckets
  • clustered by 指定分桶字段
  • into num buckets指定分桶数量
  1. 分桶表能带来什么性能提升
  • 单值过滤
  • JOIN
  • GROUP BY

2.7 修改表

  • 表重命名
alter table old_table_name rename to new_table_name; 
  • 修改表属性值
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
  • 添加分区
ALTER TABLE tablename ADD PARTITION (month='201101'); 
  • 修改分区值
ALTER TABLE tablename PARTITION (month='202005') RENAME TO PARTITION (month='201105'); 
  • 删除分区
ALTER TABLE tablename DROP PARTITION (month='201105');
  • 添加列
ALTER TABLE table_name ADD COLUMNS (v1 int, v2 string);
  • 修改列名
ALTER TABLE test_change CHANGE v1 v1new INT;
  • 删除表
DROP TABLE tablename;
  • 清空表
TRUNCATE TABLE tablename;

2.8 复杂类型操作

2.8.1 Array数组

  1. array类型,主要存储数组格式
  2. 定义格式
  • array<类型>
  • 数组元素之间的分隔符:collection items terminated by ‘分隔符’
  1. 在查询中使用
  • 数组[数字序号],可以取出指定需要元素
  • size(数组),可以统计数组元素个数
  • array contains(数组,数据),可以查看指定数据是否在数组中存在

2.8.2 Map映射

  1. map类型,主要存储:K-V键值对类型数据
  2. 定义格式
  • map<key类型,value类型>
  • 不同键值对之间:collection items terminated by ‘分隔符’
  • 一个键值对内:map keys terminated by ‘分隔符’
  1. 在查询中使用
  • map[key]来获取指定key的值
  • map_keys(map)取到全部的key作为array返回,map_values(map)取到全部的values
  • size(map)可以统计K-V对的个数

array_contains(map_values(map),数据)可以统计map是否包含指定数据

2.8.3 Struct结构

struct类型,主要存储:复合格式

定义格式

structname:string,age:int

struct的分隔符只需要:collection items terminated by ‘分隔符’

  1. 在查询中使用
  • struct.key即可取得对应的value

3. 数据查询

3.1 基本查询

Hive中使用基本查询SELECT、WHERE、GROUP BY、聚合函数、HAVING、JOIN和普通的SQL语句没有区别

3.2 RLIKE 正则匹配

可以基于正则表达式,对数据内容进行匹配

3.3 UNION联合

  • 将多个SELECT的结果集合并成一个
  • 多个SELECT的结果集需要架构一致
  • 自带去重效果,如无需去重,使用UNION ALL 即可

3.4 Sampling采样

桶抽样方式:tablesample(bucket x out of y on (colname | rand()))

块抽样方式:tablesample(num rows | num percent | num(K|M|G))

3.5 Virtual Columns虚拟列

  1. 虚拟列
  • INPUT__FILE__NAME,显示数据行所在的具体文件
  • BLOCK__OFFSET__INSIDE__FILE,显示数据行所在文件的偏移量
  • ROW__OFFSET__INSIDE__BLOCK,显示数据所在HDFS块的偏移量(此虚拟列需要设置:SET hive.exec.rowoffset=true )才可使用
  1. 作用
  • 查看行级别的数据详细参数
  • 可以用于where、group by等
  • 可以协助进行错误排查工作

4. 函数

5. 案例

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
4月前
|
存储 SQL 监控
数据中台架构解析:湖仓一体的实战设计
在数据量激增的数字化时代,企业面临数据分散、使用效率低等问题。数据中台作为统一管理与应用数据的核心平台,结合湖仓一体架构,打通数据壁垒,实现高效流转与分析。本文详解湖仓一体的设计与落地实践,助力企业构建统一、灵活的数据底座,驱动业务决策与创新。
|
2月前
|
SQL 存储 分布式计算
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
本文旨在帮助非专业数据研发但是有高频ODPS使用需求的同学们(如数分、算法、产品等)能够快速上手ODPS查询优化,实现高性能查数看数,避免日常工作中因SQL任务卡壳、失败等情况造成的工作产出delay甚至集群资源稳定性问题。
998 36
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
|
1月前
|
算法 NoSQL 关系型数据库
《聊聊分布式》分布式系统核心概念
分布式系统由多节点协同工作,突破单机瓶颈,提升可用性与扩展性。CAP定理指出一致性、可用性、分区容错性三者不可兼得,BASE理论通过基本可用、软状态、最终一致性实现工程平衡,共识算法如Raft保障数据一致与系统可靠。
|
6月前
|
存储 SQL 分布式计算
别让你的数据“裸奔”!大数据时代的数据隐私保护实战指南
别让你的数据“裸奔”!大数据时代的数据隐私保护实战指南
308 19
|
5月前
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
289 0
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
258 8
|
6月前
|
SQL 分布式计算 大数据
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
本文深入介绍 Hive 与大数据融合构建强大数据仓库的实战指南。涵盖 Hive 简介、优势、安装配置、数据处理、性能优化及安全管理等内容,并通过互联网广告和物流行业案例分析,展示其实际应用。具有专业性、可操作性和参考价值。
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
|
3月前
|
SQL 分布式计算 大数据
SparkSQL 入门指南:小白也能懂的大数据 SQL 处理神器
在大数据处理的领域,SparkSQL 是一种非常强大的工具,它可以让开发人员以 SQL 的方式处理和查询大规模数据集。SparkSQL 集成了 SQL 查询引擎和 Spark 的分布式计算引擎,使得我们可以在分布式环境下执行 SQL 查询,并能利用 Spark 的强大计算能力进行数据分析。
下一篇