HiveSQL语法全解析与实战指南
Hive SQL完整语法体系与特性解析
一、数据定义语言(DDL)
- 库操作
CREATE DATABASE [IF NOT EXISTS] dbname[COMMENT '描述'][LOCATION 'hdfs_path'][WITH DBPROPERTIES (key=value)];ALTER DATABASE dbname SET DBPROPERTIES (key=value);
DROP DATABASE [IF EXISTS] dbname [CASCADE];
- 表操作
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] tbname (列名 数据类型 [COMMENT '注释'],...
)
[COMMENT '表注释']
[PARTITIONED BY (分区列 数据类型,...)]
[CLUSTERED BY (分桶列) INTO N BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION 'hdfs_path']
[TBLPROPERTIES (key=value)];-- 示例:创建分区表
CREATE TABLE user_logs (user_id STRING,action STRING,ts BIGINT
)
PARTITIONED BY (dt STRING)
STORED AS ORC;
- 视图操作
CREATE VIEW [IF NOT EXISTS] view_name AS
SELECT ...;
二、数据操作语言(DML)
- 数据加载
LOAD DATA [LOCAL] INPATH 'filepath'
[OVERWRITE] INTO TABLE tbname
[PARTITION (分区列=值,...)];
- 数据插入
INSERT [OVERWRITE|INTO] TABLE tbname
[PARTITION (分区列=值,...)]
SELECT ...;-- 动态分区插入
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE user_logs
PARTITION (dt)
SELECT user_id, action, ts, dt
FROM source_table;
- 数据更新(需事务支持)
UPDATE tbname SET 列=值 WHERE 条件;
DELETE FROM tbname WHERE 条件;
三、查询语言(DQL)
- 基础查询
SELECT [ALL|DISTINCT] 列表达式
FROM tbname
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 过滤条件]
[ORDER BY 排序列]
[CLUSTER BY 列]
[DISTRIBUTE BY 列 SORT BY 列]
[LIMIT N];
- 窗口函数
SELECT user_id,RANK() OVER (PARTITION BY dept ORDER BY sales DESC) AS rank
FROM sales_data;
- Lateral View
SELECT user_id, item
FROM orders
LATERAL VIEW explode(items) tmp AS item;
四、数据类型差异
-
原生类型扩展
- 时间类型:
TIMESTAMP
、DATE
- 二进制类型:
BINARY
- 复杂类型:
ARRAY<数据类型> MAP<primitive_type, data_type> STRUCT<列名:数据类型,...> UNIONTYPE<data_type, data_type,...>
- 时间类型:
-
类型强制转换
SELECT CAST('123' AS INT);
五、Hive特有功能
- 分区分桶机制
-- 分区管理
ALTER TABLE tbname ADD PARTITION (dt='20230101');
MSCK REPAIR TABLE tbname; -- 自动修复分区-- 分桶抽样
SELECT * FROM tbname
TABLESAMPLE(BUCKET x OUT OF y ON 分桶列);
- 事务操作(Hive 3+)
CREATE TABLE tx_table (id INT,value STRING
)
STORED AS ORC
TBLPROPERTIES ('transactional'='true','transactional_properties'='insert_only'
);
六、与传统SQL核心差异
特性 | HiveQL | 传统SQL |
---|---|---|
执行引擎 | MapReduce/Tez/Spark | 专用查询引擎 |
延迟 | 分钟级 | 毫秒级 |
事务支持 | 有限支持(Hive 3+) | ACID完整支持 |
索引机制 | 有限 | 多种索引类型 |
数据更新 | 批量覆盖/条件删除 | 实时CRUD |
存储结构 | HDFS文件存储 | 专用存储格式 |
执行模式 | 批处理 | 交互式 |
复杂类型 | 支持ARRAY/MAP/STRUCT | 通常不支持 |
UDF扩展 | 支持Java/Python等扩展 | 存储过程/函数扩展 |
七、优化配置实践
-- 设置执行引擎
SET hive.execution.engine=tez;-- 启用向量化查询
SET hive.vectorized.execution.enabled=true;-- 合并小文件
SET hive.merge.mapfiles=true;
SET hive.merge.size.per.task=256000000;-- 启用CBO优化
SET hive.cbo.enable=true;
SET hive.compute.query.using.stats=true;
八、元数据查询
-- 查看表结构
DESCRIBE FORMATTED tbname;-- 显示分区信息
SHOW PARTITIONS tbname;-- 查询执行计划
EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] SELECT ...;
应用建议:
- 大规模数据集优先使用分区+分桶组合
- ORC/Parquet格式比文本格式性能提升50%以上
- 合理设置Map/Reduce任务数避免资源浪费
- 对频繁查询的列建立Bloom Filter索引
- 使用Tez引擎时调整容器内存分配
通过理解这些特性和差异,可以更高效地设计Hive数据仓库架构,充分发挥其在PB级数据处理场景中的优势。
相关文章:
HiveSQL语法全解析与实战指南
Hive SQL完整语法体系与特性解析 一、数据定义语言(DDL) 库操作 CREATE DATABASE [IF NOT EXISTS] dbname[COMMENT 描述][LOCATION hdfs_path][WITH DBPROPERTIES (keyvalue)];ALTER DATABASE dbname SET DBPROPERTIES (keyvalue); DROP DATABASE [IF…...
【conda报错】InvalidArchiveError
InvalidArchiveError - conda - Conda Community Forum 还是pip安装吧...

Socket 编程 TCP
目录 1. TCP socket API 详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 read&&write 1.6 connect 1.7 recv 1.8 send 1.9 popen 1.10 fgets 2. EchoServer 3. 多线程远程命令执行 4. 引入线程池版本翻译 5. 验证TCP - windows作为client访问Linu…...
Redis-6.2.9 Sentinel 哨兵配置
目录 1 操作系统信息和redis软件版本 2 集群架构图 3 部署redis主从 4 sentinel 配置文件 5 运维管理 6 go编写应用业务测试 哨兵核心功能:能够后台监控redis主机是否故障,如果故障了根据投票自动将从库转换为主库 1 操作系统信息和redis软件版本 rootu24-re…...

基于TMC5160堵转检测技术的夹紧力控制系统设计与实现
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 90万阅读 1.6万收藏 一、技术背景与系统原理 在工业自动化领域,夹紧力控制是精密装配、机床夹具等场景的核心需求。传统方案多采用压力传感器伺服电机的闭环控制方式,但存在系统复杂…...
从零开始搞个简易分布式部署环境
从零开始,意味着连个服务器都没有,所以第一步,随便上哪个顺眼的云厂家去租个便宜大碗的服务器(不要window系统的就行),说大碗也不太对,主要是这碗能在手里用得久,这个就自己扒拉去了…...

XCTF-web-fileclude
解析如下 <?php include("flag.php"); // 包含敏感文件(通常包含CTF挑战的flag) highlight_file(__FILE__); // 高亮显示当前PHP文件源代码(方便查看代码逻辑)if(isset($_GET["file1"]…...

OpenShift AI - 启用过时版本的 Notebook 镜像
《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.18 OpenShift AI 2.19 的环境中验证 文章目录 查看可用 Notebook 镜像控制台查看命令行查看 Notebook 镜像、Image Stream 和 Image Registry Repository 对应关系启用老版本的 Notebook 镜…...

Redis 缓存穿透、缓存击穿、缓存雪崩详解与解决方案
在分布式系统中,Redis 凭借高性能和高并发处理能力,成为常用的缓存组件。然而,在实际应用中,缓存穿透、缓存击穿、缓存雪崩这三大问题会严重影响系统的性能与稳定性。本文将详细解析这三个问题的成因,并提供对应的解决…...
sass高阶应用
Sass(尤其是 SCSS 语法)除了基础功能外,还提供了许多高级特性,可以实现更灵活、可维护的样式系统。以下是 Sass 的 高级语法和应用技巧,适合中大型项目或组件库开发。 文章目录 一、控制指令(Control Directives)1. `@if / @else`2. `@for` 循环3. `@each` 遍历列表/Map…...
docker docker-ce docker.io
Ubuntu安装 更新软件包列表 首先确保软件包列表是最新的: sudo apt-get update 使用正确的卸载命令 替换 docker-engine 为 docker-ce 或 docker.io: sudo apt-get remove docker docker-ce docker.io containerd runc 检查已安装的 Do…...

DQN和DDQN(进阶版)
来源: *《第五章 深度强化学习 Q网络》.ppt --周炜星、谢文杰 一、前言 Q表格、Q网络与策略函数 Q表格是有限的离散的,而神经网络可以是无限的。 对于动作有限的智能体来说,使用Q网络获得当下状态的对于每个动作的 状态-动作值 。那么 a…...

【组件】翻牌器效果
目录 效果组件代码背景素材 效果 组件代码 <template><divclass"card-flop":style"{height: typeof height number ? ${height}px : height,--box-width: typeof boxWidth number ? ${boxWidth}px : boxWidth,--box-height: typeof boxHeight nu…...

CentOS 7 环境中部署 LNMP(Linux + Nginx + MySQL 5.7 + PHP)
在 CentOS 7 环境中部署 LNMP(Linux Nginx MySQL 5.7 PHP) 环境的详细步骤如下。此方案确保各组件版本兼容,并提供完整的配置验证流程。 1. 更新系统 sudo yum update -y 2. 安装 MySQL 5.7 2.1 添加 MySQL 官方 YUM 仓库 由于MySQL并不…...

NX811NX816美光颗粒固态NX840NX845
NX811NX816美光颗粒固态NX840NX845 美光NX系列固态硬盘颗粒深度解析:技术、性能与市场全景透视 一、技术架构与核心特性解析 1. NX811/NX816:入门级市场的平衡之选 技术定位:基于176层TLC(Triple-Level Cell)3D NAN…...

捋捋wireshark
本猿搬砖时会用到wireshark分析pcap包,但频率不高,记过一些笔记,今天捋捋,希望能给初学者节省一点时间。 wireshark是个网络封包分析软件(network packet analyzer),可以用来抓流量包ÿ…...

c++学习之---模版
目录 一、函数模板: 1、基本定义格式: 2、模版函数的优先匹配原则: 二、类模板: 1、基本定义格式: 2、类模版的优先匹配原则(有坑哦): 3、缺省值的设置: 4、ty…...
MyBatis-Flex 全面指南:下一代轻量级持久层框架实战入门
🚀 MyBatis-Flex 全面指南:下一代轻量级持久层框架实战入门 本文将带你全面了解 MyBatis-Flex 的特性、常见用法、最佳实践,帮助你高效构建更简洁、更灵活的 Java 持久层代码。 🧩 什么是 MyBatis-Flex? MyBatis-Flex…...

第十六章 EMQX黑名单与连接抖动检测
系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具的安装与使用 …...
WebSphere(WAS)
WebSphere (WebSphere Application Server)为 SOA 环境提供软件,以实现动态的、互联的业务流程,为所有业务情形提供高度有效的应用程序基础架构。WebSphere 是 IBM 的应用程序和集成软件平台,包含所有必要的中间件基础…...
新编辑器编写指南--给自己的备忘
欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…...
xPSR
在 ARM Cortex-M3 中,xPSR(组合程序状态寄存器) 是核心的状态控制寄存器,由三个子状态寄存器合并而成,用于记录处理器的运算状态、中断状态和执行环境。以下是其深度解析: 🔍 一、xPSR …...

鸿蒙网络数据传输案例实战
一、案例效果截图 二、案例运用到的知识点 核心知识点 网络连接管理:connection模块HTTP数据请求:http模块RPC数据请求:rcp模块文件管理能力:fileIo模块、fileUri模块 其他知识点 ArkTS 语言基础V2版状态管理:Comp…...

【JavaEE】-- 网络原理
文章目录 1. 网络发展史1.1 广域网1.2 局域网 2. 网络通信基础2.1 IP地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 分层的作用2.5.2 OSI七层模型(教科书)2.5.3 TCP/IP五层(或四层)模型(工业中常用ÿ…...

1.RV1126-OPENCV 交叉编译
一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包,并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…...

PySide6 GUI 学习笔记——常用类及控件使用方法(标签控件QLabel)
文章目录 标签控件QLabel及其应用举例标签控件QLabel的常用方法及信号应用举例Python 代码示例1Python 代码示例2 小结 标签控件QLabel及其应用举例 QLabel 是 PySide6.QtWidgets 模块中的一个控件,用于在界面上显示文本或图像。它常用于作为标签、提示信息或图片展…...

CSS (mask)实现服装动态换色:创意与技术的完美融合
在网页开发中,我们常常会遇到需要对图片元素进行个性化处理的需求,比如改变图片中特定部分的颜色。今天,我们就来探讨一种通过 CSS 和 JavaScript 结合,实现服装动态换色的有趣方法。 一、代码整体结构分析 上述代码构建了一个完…...

基于51单片机的音乐盒汽车喇叭调音量proteus仿真
地址: https://pan.baidu.com/s/1l3CSSMi4uMV5-XLefnKoSg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…...

彻底理解Spring三级缓存机制
文章目录 前言一、Spring解决循环依赖时,为什么要使用三级缓存? 前言 Spring解决循环依赖的手段,是通过三级缓存: singletonObjects:存放所有生命周期完整的单例对象。(一级缓存)earlySingleto…...
MacOs 安装局域网 gitlab 记录
1、安装git brew install git > Downloading https://homebrew.bintray.com/bottles/git-2.7.0.el_capitan.bottle ######################################################################## 100.0% > Pouring git-2.7.0.el_capitan.bottle.tar.gz > Caveats The O…...