0%

hive查询数据详解:从基础语法到分布式特性

Hive 查询语法与传统 SQL 高度兼容,但作为分布式数据仓库,其查询执行依赖 MapReduce/Spark 等引擎,因此衍生出适合分布式场景的特性(如 SORT BYDISTRIBUTE BY 等)。本文重点讲解 Hive 查询的基础语法、分布式排序与分区特性,帮助开发者高效编写 Hive SQL。

Hive 查询基础语法

Hive 查询核心语法与 SQL 一致,支持 SELECTWHEREGROUP BYJOIN 等常见操作,适用于结构化数据的筛选、聚合和关联分析。

基础查询操作

操作类型 语法示例 说明
全表扫描 SELECT * FROM dept; 查询表中所有列和行
特定列查询 SELECT deptno, dname FROM dept; 仅查询指定列,减少数据传输
条件过滤 SELECT * FROM emp WHERE sal > 2000; 通过 WHERE 筛选符合条件的行
别名设置 SELECT deptno AS no, dname AS name FROM dept; AS 为列或表设置别名,简化查询
去重查询 SELECT DISTINCT deptno FROM emp; DISTINCT 去除重复值

范围与模糊查询

Hive 支持 SQL 中的范围判断和模糊匹配,满足复杂筛选需求:

范围查询
1
2
3
4
5
-- 数值范围(BETWEEN ... AND)  
SELECT * FROM emp WHERE sal BETWEEN 1000 AND 3000;

-- 枚举范围(IN)
SELECT * FROM emp WHERE deptno IN (10, 20); -- 查询部门 10 和 20 的数据

模糊查询(LIKE

阅读全文 »

hive数据导出全指南:从 HDFS 到本地的完整方案

Hive 数据导出是数据分析流程的重要环节,需将处理后的结果导出到本地文件系统、HDFS 或其他系统。Hive 提供了多种导出方式,适用于不同场景(如批量导出、脚本自动化、元数据保留等)。本文详细讲解每种导出方式的操作步骤、原理及适用场景。

使用 INSERT OVERWRITE 语句导出数据

INSERT OVERWRITE 是 Hive 原生的导出命令,支持将查询结果导出到本地文件系统或 HDFS,可指定分隔符格式,灵活适配下游系统需求。

导出到本地文件系统

通过 LOCAL DIRECTORY 指定本地路径,将数据导出到客户端所在机器的本地目录。

语法格式
1
2
3
4
5
INSERT OVERWRITE LOCAL DIRECTORY '本地路径'  
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '分隔符' -- 指定列分隔符(如 '\t'、',')
[LINES TERMINATED BY '行分隔符'] -- 可选,指定行分隔符
SELECT1, 列2 FROM 表名 [WHERE 条件];
实操示例
1
2
3
4
5
-- 将 dept 表数据导出到本地 /tmp/hive_export 目录,列用制表符分隔  
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/hive_export/dept'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
SELECT deptno, dname FROM dept;
导出结果验证
阅读全文 »

hive数据导入全攻略:从 HDFS 到 INSERT 详解

Hive 作为数据仓库工具,数据导入是核心操作之一。由于 Hive 依赖 HDFS 存储数据,导入方式灵活多样,包括直接操作 HDFS、LOAD DATA 命令及 INSERT 语句。本文详细讲解每种导入方式的原理、操作步骤及注意事项,帮助开发者高效导入数据。

帮助开发者高效导入数据。

通过 HDFS 直接上传数据

Hive 表的数据本质上存储在 HDFS 目录中,因此可直接通过 HDFS 命令将数据文件上传到表对应的目录,实现数据导入。

操作步骤

  1. 创建表并确认存储路径
    先创建表(以内部表为例),并通过 desc formatted 查看表在 HDFS 上的存储路径:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- 创建表(指定列分隔符为制表符 \t)  
    create table if not exists dept(
    deptno int,
    dname string
    )
    row format delimited fields terminated by '\t';

    -- 查看表存储路径
    hive (study_hive)> desc formatted dept;
    ...
    Location: hdfs://localhost:9000/user/hive/warehouse/study_hive.db/dept
    ...
  2. 准备本地数据文件
    创建 dept.txt,内容如下(列之间用制表符分隔):

    1
    2
    1    财务  
    2 IT
  3. 通过 HDFS 命令上传文件
    使用 hdfs dfs -put 将本地文件上传到表的 HDFS 目录:

    1
    hdfs dfs -put ./dept.txt /user/hive/warehouse/study_hive.db/dept/  
  4. 查询表数据验证
    上传后直接查询表,数据已导入:

阅读全文 »

hive内部表与外部表:核心区别与实战指南

在 Hive 中,数据表分为 内部表(管理表)外部表,二者的核心区别在于数据的管理权归属。理解这两种表的特性对数据仓库设计、数据生命周期管理至关重要。本文详细解析内部表与外部表的差异、转换方法及适用场景。

内部表(Managed Table)

内部表是 Hive 的默认表类型,由 Hive 完全管理数据的生命周期,包括存储和元数据。

核心特性

  1. 数据存储位置:默认存储在 HDFS 的 hive.metastore.warehouse.dir 配置路径下(通常为 /user/hive/warehouse/<数据库名>.db/<表名>)。

    • 示例:数据库study_hive中的表user_info数据路径为:

      1
      hdfs://localhost:9000/user/hive/warehouse/study_hive.db/user_info  
  2. 数据管理权:Hive 拥有数据的完全控制权,删除表时会 同时删除元数据和 HDFS 上的数据

  3. 适用场景

    • 临时表或中间结果表(数据生命周期与表绑定);
    • 无需与其他工具共享的数据(数据仅由 Hive 管理)。

创建语法

内部表创建无需添加 EXTERNAL 关键字,语法如下:

阅读全文 »

hive数据表 DML 操作全指南:从数据库到表的核心操作

Hive 作为数据仓库工具,其 DML(数据操纵语言)操作与传统 SQL 高度兼容,但也存在适应分布式存储的特殊语法(如分区、外部表)。本文详细讲解 Hive 中数据库和数据表的核心操作,包括创建、查询、修改和删除,帮助开发者快速上手 Hive 数据管理。

数据库操作

数据库在 Hive 中主要用于隔离不同业务的数据表,类似传统数据库的 “命名空间”。所有数据库的元数据存储在 Metastore 中,实际数据存储在 HDFS 上。

查看数据库列表

使用 show databases 查看所有数据库,默认数据库为 default

1
2
3
4
5
hive (default)> show databases;  
OK
default
study_hive -- 已创建的自定义数据库
Time taken: 0.123 seconds

创建数据库

通过 CREATE DATABASE 语句创建数据库,支持指定存储路径、注释和属性。

基本语法
1
2
3
4
CREATE DATABASE [IF NOT EXISTS] database_name  
[COMMENT '数据库注释']
[LOCATION 'hdfs_path'] -- 指定数据库在 HDFS 上的存储路径
[WITH DBPROPERTIES ('key'='value', ...)]; -- 自定义数据库属性
实操示例
1
2
3
4
5
6
-- 创建数据库(若不存在)  
CREATE DATABASE IF NOT EXISTS study_hive
COMMENT '用于学习 Hive 的数据库'
LOCATION '/user/hive/warehouse/study_hive.db'; -- 显式指定 HDFS 路径

-- 若不指定 LOCATION,默认路径为:hdfs://<namenode>/user/hive/warehouse/<database_name>.db

查看数据库详情

使用 desc databasedesc database extended 查看数据库的元数据信息:

阅读全文 »