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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 黑马程序员-大数据入门到实战-分布式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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
10天前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
9天前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
1月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
134 35
|
3月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
168 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
3月前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
245 7
|
3月前
|
SQL 分布式计算 DataWorks
MaxCompute MaxFrame评测 | 分布式Python计算服务MaxFrame(完整操作版)
在当今数字化迅猛发展的时代,数据信息的保存与分析对企业决策至关重要。MaxCompute MaxFrame是阿里云自研的分布式计算框架,支持Python编程接口、兼容Pandas接口并自动进行分布式计算。通过MaxCompute的海量计算资源,企业可以进行大规模数据处理、可视化数据分析及科学计算等任务。本文将详细介绍如何开通MaxCompute和DataWorks服务,并使用MaxFrame进行数据操作。包括创建项目、绑定数据源、编写PyODPS 3节点代码以及执行SQL查询等内容。最后,针对使用过程中遇到的问题提出反馈建议,帮助用户更好地理解和使用MaxFrame。
|
4月前
|
机器学习/深度学习 分布式计算 数据挖掘
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
110 4
|
4月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
176 2
|
5月前
|
SQL 算法 大数据
为什么大数据平台会回归SQL
在大数据领域,尽管非结构化数据占据了大数据平台80%以上的存储空间,结构化数据分析依然是核心任务。SQL因其广泛的应用基础和易于上手的特点成为大数据处理的主要语言,各大厂商纷纷支持SQL以提高市场竞争力。然而,SQL在处理复杂计算时表现出的性能和开发效率低下问题日益凸显,如难以充分利用现代硬件能力、复杂SQL优化困难等。为了解决这些问题,出现了像SPL这样的开源计算引擎,它通过提供更高效的开发体验和计算性能,以及对多种数据源的支持,为大数据处理带来了新的解决方案。
|
5月前
|
机器学习/深度学习 分布式计算 算法
【大数据分析&机器学习】分布式机器学习
本文主要介绍分布式机器学习基础知识,并介绍主流的分布式机器学习框架,结合实例介绍一些机器学习算法。
860 5

热门文章

最新文章

下一篇
oss创建bucket