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

HiveQL | 个人学习笔记

资料很少,整理一下能用到的。HiveQL 和 Hive SQL 通常指的是同一个东西,都是指 Hive Query Language 的缩写或简称。

1.详情

HiveQL是一种类似SQL的语言, 它与大部分的SQL语法兼容, 但是并不完全支持SQL标准, 如HiveQL不支持更新操作, 也不支持索引和事务, 它的子查询和join操作也很局限, 这是因其底层依赖于Hadoop云平台这一特性决定的, 但其有些特点是SQL所无法企及的。例如多表查询、支持create table as select和集成MapReduce脚本等, 本节主要介绍Hive的数据类型和常用的HiveQL操作。

2.常见用法

  1. 数据定义语言(DDL)

    • 创建数据库:CREATE DATABASE database_name;
    • 删除数据库:DROP DATABASE database_name;
    • 显示所有数据库:SHOW DATABASES;
    • 使用数据库:USE database_name;
    • 创建表:CREATE TABLE table_name (column1 data_type, column2 data_type, ...);
    • 删除表:DROP TABLE table_name;
    • 显示所有表:SHOW TABLES;
    • 修改表结构:ALTER TABLE table_name ADD/ALTER/DROP COLUMN column_name data_type;
  2. 数据操作语言(DML)

  • 插入(覆盖 / 追加)
  -- 覆盖整张表INSERT OVERWRITE TABLE table_nameSELECT col1, col2 FROM source_table WHERE ...;-- 追加到表/分区INSERT INTO TABLE table_name PARTITION (dt='2025-08-19')SELECT col1, col2 FROM source_table WHERE ...;
  • 更新数据(仅支持 ACID 表,且需开启事务):
UPDATE table_name
SET col = new_value
WHERE condition;
  • 删除数据(仅支持 ACID 表):DELETE FROM table_name WHERE condition;
  1. 数据查询语言(DQL)

    • 聚合函数:COUNT(), SUM(), AVG(), MIN(), MAX()
    • 分组:GROUP BY column1, column2, ... HAVING condition;
    • 排序:ORDER BY column1 ASC/DESC, column2 ASC/DESC, ...;
    • 分页:LIMIT start, count;
    • 连接查询:JOIN table1 ON table1.column = table2.column;
    • 子查询:SELECT * FROM table_name WHERE column IN (SELECT column FROM another_table);
  2. 数据控制语言(DCL)

    • 授权:GRANT permissions ON database_name.table_name TO user_name;
    • 撤销权限:REVOKE permissions ON database_name.table_name FROM user_name;
    • 创建用户:CREATE USER user_name IDENTIFIED BY password;
    • 删除用户:DROP USER user_name;
  3. 其他常用语句

    • 查看表结构:DESCRIBE table_name;
    • 查看表详情:DESCRIBE FORMATTED table_name;
    • 查看表分区:SHOW PARTITIONS table_name;
    • 查看表统计信息:ANALYZE table_name;
    • 查看表数据文件位置:MSCK REPAIR table_name;

3.直接导入CSV到Hive表

3.1方法1:创建hive后导入csv文件

-- 创建外部表(数据存储在HDFS,删除表不会删除数据文件)
CREATE EXTERNAL TABLE IF NOT EXISTS my_hive_table (column1 STRING,column2 INT,column3 DOUBLE,column4 TIMESTAMP
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','  -- CSV文件分隔符
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/mydb.db/my_hive_table';  -- 可选,指定存储位置-- 或者创建内部表(删除表时会同时删除数据)
CREATE TABLE IF NOT EXISTS my_hive_table (column1 STRING,column2 INT,column3 DOUBLE,column4 TIMESTAMP
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;-- 将本地CSV文件加载到Hive表(文件会被移动到HDFS)
LOAD DATA LOCAL INPATH '/path/to/local/file.csv' 
INTO TABLE my_hive_table;-- 加载HDFS上的CSV文件(文件不会被移动)
LOAD DATA INPATH '/hdfs/path/to/file.csv' 
INTO TABLE my_hive_table;-- 查看前10行数据
SELECT * FROM my_hive_table LIMIT 10;-- 查看表结构
DESCRIBE FORMATTED my_hive_table;

补充:(1)如果CSV包含标题行,需要跳过:TBLPROPERTIES ("skip.header.line.count"="1"),(2)NULL值处理:TBLPROPERTIES ("serialization.null.format"=""),(3)日期格式:如果CSV中包含日期,可能需要指定格式:TBLPROPERTIES ("timestamp.formats"="yyyy-MM-dd HH:mm:ss");,(4)
大数据量:对于大文件,考虑先将文件上传到HDFS,然后创建外部表指向该位置

3.2 方法2:直接写入

# 使用PySpark自动推断Schema并创建Hive表
from pyspark.sql import SparkSessionspark = SparkSession.builder.appName("CSV to Hive").enableHiveSupport().getOrCreate()# 自动推断Schema并创建Hive表
df = spark.read.option("header", "true").option("inferSchema", "true").csv("hdfs://path/to/your/file.csv")
df.write.saveAsTable("my_hive_table")

如果csv文件过大,考虑用Dask集群做并行化处理。
Dask 集群 是一个分布式计算框架,用于处理大规模数据(超出单机内存限制)和并行计算任务。它类似于 Spark,但更轻量且灵活,特别适合与 Python 生态(如 Pandas、Scikit-learn)集成。
核心组件:
Scheduler(调度器)管理任务分配和结果收集。有两种类型:LocalCluster:单机多进程(用于开发测试)。SSHCluster:多机分布式(用于生产);
Workers(工作者):执行实际计算的进程。每个 Worker 有自己的内存空间(避免单机内存限制);
Client(客户端):用户接口,用于提交任务(如 dask.dataframe 操作)。

# Dask + PyHive (直接写入Hive)
import dask.dataframe as dd
from pyhive import hive# 1. 使用Dask读取大CSV文件
ddf = dd.read_csv('hdfs://path/to/your/large_file.csv',  # 或本地路径blocksize='256MB',  # 每个分块大小assume_missing=True,  # 自动推断缺失值dtype={'column1': 'object', 'column2': 'float64'}  # 可选:指定列类型
)# 2. 连接到Hive
conn = hive.connect(host='your_hive_server', port=10000, username='your_username')# 3. 创建Hive表(如果不存在)
create_table_sql = """
CREATE TABLE IF NOT EXISTS my_hive_table (column1 STRING,column2 DOUBLE,...
)
STORED AS PARQUET
"""
with conn.cursor() as cursor:cursor.execute(create_table_sql)# 4. 分块写入Hive(使用to_sql的替代方案)
def write_partition(partition):# 每个分区建立新连接with hive.connect(host='your_hive_server', port=10000, username='your_username') as temp_conn:partition.to_sql('my_hive_table',temp_conn,if_exists='append',index=False,method='multi')return None# 应用写入函数到每个分区
_ = ddf.map_partitions(write_partition).compute()

30分钟入门 Hive SQL(HQL 入门篇) - 钟林子钰的文章 - 知乎
一文学完所有的Hive Sql(两万字最全详解)
Hadoop生态体系

http://www.dtcms.com/a/338488.html

相关文章:

  • JetBrains系列产品-IDEA/PyCharm/GoLand自动生成方法返回值的快捷键,查看方法参数的快捷键。
  • AI驱动的SEO关键词优化秘籍
  • MFC中使用EXCEL的方法之一
  • 数据迁移:如何从MySQL数据库高效迁移到Neo4j图形数据库
  • 迁移学习(Transfer Learning)
  • 当机器猫遇上具身智能:一款能读懂宠物心思的AI守护者
  • 分布式搜索(Elasticsearch)基本用法
  • kubeadm部署k8s集群环境搭建
  • Qt密码生成器项目开发教程 - 安全可靠的随机密码生成工具
  • QT聊天项目DAY19
  • 深入理解Prompt构建与工程技巧:API高效实践指南
  • 如何将Date类型的数据转换为LocalDateTime类型
  • 链表-2.两数相加-力扣(LeetCode)
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day7
  • Java开发面试实战:Spring Boot微服务与数据库优化案例分析
  • 微服务如何集成swagger3
  • Leetcode70爬楼梯
  • CF思维训练回顾
  • 摄像头模块在运动相机中的应用
  • 【Linux】文件系统
  • 【基础-判断】用户在长视频、短视频、直播、通话、会议、拍摄类应用等场景下,可以采用悬停适配在折叠屏半折态时,上屏进行浏览下屏进行交互操作
  • 工业相机基本知识解读:像元、帧率、数据接口等
  • ABAP - 会计凭证行项目文本和抬头文本增强
  • ios使用saveVideoToPhotosAlbum 保存视频失败提示 invalid video
  • [Polly智能维护网络] 弹性管道 | 弹性管道构建器 | new | Add | .Build()
  • PIX2SEQ: A LANGUAGE MODELING FRAMEWORK FOR OBJECT DETECTION
  • MongoDB从入门到精通:
  • 【LeetCode】17. 电话号码的字母组合
  • SpreadJS 协同服务器 MongoDB 数据库适配支持
  • [系统架构设计师]云原生架构设计理论与实践(十四)