1. Hive SQL 完全指南:DDL与DML深度解析
在大数据领域,Hive作为Hadoop生态系统中的重要组件,为数据分析师和工程师提供了强大的SQL-like查询能力。本文将深入探讨Hive SQL的两大核心组成部分:数据定义语言(DDL)和数据操作语言(DML),帮助读者全面掌握Hive的数据管理能力。
1.1 Hive SQL语言分类概览
Hive SQL语言主要分为三类:数据定义语言(DDL)、数据操作语言(DML)和数据查询语言(DQL)。理解这三者的区别对于高效使用Hive至关重要。
1.1.1 SQL语言分类
Hive SQL语言分类如下:
- DDL(数据定义语言):用于创建、修改和删除数据库对象
- DML(数据操作语言):用于操作表中的数据
- DQL(数据查询语言):主要用于数据查询
1.1.2 主要区别
| 特性 | DDL | DML |
|---|---|---|
| 全称 | Data Definition Language | Data Manipulation Language |
| 作用 | 定义和管理数据库对象 | 操作表中的数据 |
| 是否修改数据 | 否 | 是 |
| 是否修改结构 | 是 | 否 |
| 事务性 | 通常自动提交 | 支持事务 |
| 回滚 | 不可回滚 | 可回滚 |
2. DDL(数据定义语言)详解
DDL是Hive中用于定义和管理数据库对象的语言,包括数据库、表、视图、索引等的创建、修改和删除操作。
2.1 数据库操作
2.1.1 创建数据库
sql复制-- 基础创建
CREATE DATABASE IF NOT EXISTS mydb;
-- 指定位置和注释
CREATE DATABASE IF NOT EXISTS mydb
COMMENT 'This is my database'
LOCATION '/user/hive/warehouse/mydb.db'
WITH DBPROPERTIES ('creator'='zhangsan', 'date'='2024-01-01');
-- 创建时指定字符集
CREATE DATABASE mydb
CHARACTER SET 'latin1'
COLLATE 'latin1_bin';
在实际项目中,建议为每个业务线创建独立的数据库,并使用一致的命名规范。例如,电商系统可以创建order_db、user_db、product_db等数据库。
2.1.2 查看和切换数据库
sql复制-- 查看所有数据库
SHOW DATABASES;
SHOW DATABASES LIKE 'my*';
-- 查看数据库详细信息
DESCRIBE DATABASE mydb;
DESCRIBE DATABASE EXTENDED mydb; -- 显示更多属性
-- 切换当前数据库
USE mydb;
-- 查看当前数据库
SELECT current_database();
提示:在生产环境中,建议使用
DESCRIBE DATABASE EXTENDED查看数据库的完整属性,特别是位置信息,这对于数据管理和迁移非常重要。
2.1.3 修改数据库
sql复制-- 修改数据库属性
ALTER DATABASE mydb
SET DBPROPERTIES ('edited-by'='lisi');
-- 修改所有者
ALTER DATABASE mydb
SET OWNER USER 'lisi';
-- 修改位置(仅限托管数据库)
ALTER DATABASE mydb
SET LOCATION '/new/path/to/database';
数据库修改操作需要谨慎执行,特别是修改位置的操作,可能会导致已有表无法访问。
2.1.4 删除数据库
sql复制-- 删除空数据库
DROP DATABASE IF EXISTS mydb;
-- 级联删除(删除数据库及其所有表)
DROP DATABASE IF EXISTS mydb CASCADE;
-- 限制删除(默认,数据库非空时拒绝删除)
DROP DATABASE IF EXISTS mydb RESTRICT;
警告:DROP DATABASE CASCADE会删除数据库中的所有表和数据,操作不可逆,执行前务必确认。
2.2 表操作
表是Hive中存储数据的基本单位,Hive支持多种表类型,包括内部表、外部表、分区表、分桶表等。
2.2.1 创建内部表(托管表)
sql复制-- 创建内部表
CREATE TABLE IF NOT EXISTS employees (
emp_id INT COMMENT 'Employee ID',
emp_name STRING COMMENT 'Employee Name',
emp_salary DECIMAL(10,2) COMMENT 'Monthly Salary',
hire_date DATE COMMENT 'Hire Date',
department STRING COMMENT 'Department',
is_active BOOLEAN COMMENT 'Active Status'
)
COMMENT 'Employee Information Table'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
TBLPROPERTIES ('comment'='Main employee table', 'creator'='admin');
-- 使用LIKE创建相同结构的表
CREATE TABLE employees_copy LIKE employees;
内部表由Hive完全管理,删除表时会同时删除表中的数据。适用于临时数据或中间结果存储。
2.2.2 创建外部表
sql复制-- 创建外部表(数据存储在指定位置)
CREATE EXTERNAL TABLE IF NOT EXISTS external_employees (
emp_id INT,
emp_name STRING,
emp_salar
