当前位置: 首页 > news >正文

HiveSQL语法全解析与实战指南

Hive SQL完整语法体系与特性解析

一、数据定义语言(DDL)
  1. 库操作
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];

  1. 表操作
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;

  1. 视图操作
CREATE VIEW [IF NOT EXISTS] view_name AS
SELECT ...;

二、数据操作语言(DML)
  1. 数据加载
LOAD DATA [LOCAL] INPATH 'filepath' 
[OVERWRITE] INTO TABLE tbname 
[PARTITION (分区列=值,...)];

  1. 数据插入
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;

  1. 数据更新(需事务支持)
UPDATE tbname SET 列=值 WHERE 条件;
DELETE FROM tbname WHERE 条件;

三、查询语言(DQL)
  1. 基础查询
SELECT [ALL|DISTINCT] 列表达式
FROM tbname
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 过滤条件]
[ORDER BY 排序列]
[CLUSTER BY 列]
[DISTRIBUTE BY 列 SORT BY 列]
[LIMIT N];

  1. 窗口函数
SELECT user_id,RANK() OVER (PARTITION BY dept ORDER BY sales DESC) AS rank
FROM sales_data;

  1. Lateral View
SELECT user_id, item
FROM orders
LATERAL VIEW explode(items) tmp AS item;

四、数据类型差异
  1. 原生类型扩展

    • 时间类型:TIMESTAMPDATE
    • 二进制类型:BINARY
    • 复杂类型:
      ARRAY<数据类型>
      MAP<primitive_type, data_type>
      STRUCT<列名:数据类型,...>
      UNIONTYPE<data_type, data_type,...>
      

  2. 类型强制转换

SELECT CAST('123' AS INT);

五、Hive特有功能
  1. 分区分桶机制
-- 分区管理
ALTER TABLE tbname ADD PARTITION (dt='20230101');
MSCK REPAIR TABLE tbname;  -- 自动修复分区-- 分桶抽样
SELECT * FROM tbname 
TABLESAMPLE(BUCKET x OUT OF y ON 分桶列);

  1. 事务操作(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 ...;

应用建议

  1. 大规模数据集优先使用分区+分桶组合
  2. ORC/Parquet格式比文本格式性能提升50%以上
  3. 合理设置Map/Reduce任务数避免资源浪费
  4. 对频繁查询的列建立Bloom Filter索引
  5. 使用Tez引擎时调整容器内存分配

通过理解这些特性和差异,可以更高效地设计Hive数据仓库架构,充分发挥其在PB级数据处理场景中的优势。

http://www.xdnf.cn/news/740305.html

相关文章:

  • 累加法求数列通项公式
  • 点云识别模型汇总整理
  • 【C++】入门基础知识(1.5w字详解)
  • 解决Acrobat印前检查功能提示无法为用户配置文件问题
  • 【Day40】
  • 从equals思考对“正念”的认知
  • 超级对话:大跨界且大综合的学问融智学应用场景述评(不同第三方的回应)之一
  • 位置规划模式和周期同步位置模式区别
  • 刀具问题讨论
  • Tkinter软件——显示txt标签的目标水平边框图像
  • StringBulder的底层原理?
  • 多功能文档处理工具推荐
  • YOLOv8目标检测实战-(TensorRT原生API搭建网络和使用Parser搭建网络)
  • 海外DeepLink方案复杂?用openinstall一站式链接世界
  • Dart语言学习指南「专栏简介」
  • Display Driver Uninstaller(DDU卸载显卡驱动工具)官网下载
  • 扫地机器人苦寻新引擎,大疆们却已攻入腹地
  • 龙舟竞渡与芯片制造的共通逻辑:华芯邦的文化破局之道
  • 使用基于Xsens惯性传感器的动作捕捉技术测量人体工程学
  • 【DRAM存储器五十二】LPDDR5介绍--MR17设置的SOC ODT是啥?
  • 文心快码参编国内首个软件开发智能体技术规范
  • 回车键为什么叫做“回车键”?
  • 雷达目标起伏特性简析
  • vue3实现鼠标悬浮div动画效果
  • muduo库的初步认识和基本使用,创建一个简单查询单词服务系统
  • 二重积分的线性性
  • 【吾爱】逆向实战crackme160学习记录(一)
  • 辅助脚本-通用开发工作区目录结构生成脚本解析与实践指南
  • 软件测试的分类
  • 半导体行业重金属废水处理技术革新:从传统沉淀到复合工艺的突破