Hive高级建表技巧总结

目录

[1 分区表](#1 分区表)

[2 外部表](#2 外部表)

[3 ARRAY类型](#3 ARRAY类型)

[4 MAP类型](#4 MAP类型)

[5 STRUCT类型](#5 STRUCT类型)

[6 动态分区](#6 动态分区)

[7 表的生命周期管理](#7 表的生命周期管理)

7.1创建临时表

[7.2 设置表的生存时间(TTL)](#7.2 设置表的生存时间(TTL))

[8 存储格式优化](#8 存储格式优化)

[8.1 ORC格式](#8.1 ORC格式)

[8.2 Parquet格式](#8.2 Parquet格式)

[9 实战案例](#9 实战案例)

[如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:](#如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:)

数字化建设通关指南

[专栏 原价99,现在活动价59.9,按照阶梯式增长,直到恢复原价。](#专栏 原价99,现在活动价59.9,按照阶梯式增长,直到恢复原价。)


1 分区表

分区表可以提高查询效率

sql 复制代码
CREATE TABLE partition_table (
   id INT,
   name STRING
)
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

2 外部表

外部表适用于数据已存在于HDFS的情况:

sql 复制代码
CREATE EXTERNAL TABLE external_table (
   id INT,
   name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/user/hive/warehouse/external_table';

3 ARRAY类型

sql 复制代码
CREATE TABLE employees (
    name STRING,
    skills ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':';

4 MAP类型

sql 复制代码
CREATE TABLE user_attributes (
    user_id INT,
    attributes MAP<STRING, STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':'
MAP KEYS TERMINATED BY '#';

5 STRUCT类型

sql 复制代码
CREATE TABLE complex_types (
    id INT,
    contact STRUCT<phone:STRING, email:STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':';

6 动态分区

动态分区允许在插入数据时自动创建分区,非常适合处理大量分区的场景。

sql 复制代码
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;

CREATE TABLE sales (
    id INT,
    amount DOUBLE,
    date STRING
)
PARTITIONED BY (year INT, month INT);

INSERT OVERWRITE TABLE sales
PARTITION(year, month)
SELECT id, amount, date, 
       YEAR(date) as year, 
       MONTH(date) as month 
FROM raw_sales;

7 表的生命周期管理

7.1创建临时表

临时表只在当前会话中有效,会话结束后自动删除。

sql 复制代码
CREATE TEMPORARY TABLE temp_stats (
    metric STRING,
    value DOUBLE
);

7.2 设置表的生存时间(TTL)

sql 复制代码
CREATE TABLE expiring_logs (
    log_time TIMESTAMP,
    event STRING
)
TBLPROPERTIES ('transient_lastDdlTime'='1635724800');

ALTER TABLE expiring_logs 
SET TBLPROPERTIES ('lifetime'='30d');

8 存储格式优化

8.1 ORC格式

sql 复制代码
CREATE TABLE orc_table (
    id INT,
    name STRING
)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");

8.2 Parquet格式

sql 复制代码
CREATE TABLE parquet_table (
    id INT,
    name STRING
)
STORED AS PARQUET;

9 实战案例

假设我们需要设计一个高效的日志分析系统,可以这样构建表结构:

sql 复制代码
-- 创建原始日志表
CREATE EXTERNAL TABLE raw_logs (
    log_time TIMESTAMP,
    user_id STRING,
    ip STRING,
    action STRING,
    details STRING
)
PARTITIONED BY (date STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/data/raw_logs';

-- 创建优化后的分析表
CREATE TABLE analyzed_logs (
    log_hour TIMESTAMP,
    user_id STRING,
    action STRING,
    action_count INT
)
PARTITIONED BY (date STRING)
CLUSTERED BY (user_id) INTO 32 BUCKETS
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");

-- 使用动态分区插入数据
INSERT OVERWRITE TABLE analyzed_logs
PARTITION (date)
SELECT 
    FLOOR(log_time TO HOUR) as log_hour,
    user_id,
    action,
    COUNT(*) as action_count,
    TO_DATE(log_time) as date
FROM raw_logs
GROUP BY 
    FLOOR(log_time TO HOUR),
    user_id,
    action,
    TO_DATE(log_time);

这个设计充分利用了分区、分桶和列式存储的优势,可以高效地支持各种分析查询。

如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:
数字化建设通关指南
专栏 原价99,现在活动价59.9,按照阶梯式增长,直到恢复原价。

具体专栏链接如下:

​​​​​​数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

相关推荐
@insist12312 小时前
信息系统管理工程师-数字化转型成熟度模型核心考点解析
大数据·人工智能·软考·软件水平考试·信息系统管理工程师·软考信管
AvatarAI_Walker13 小时前
2026年7月安徽健康 IP 孵化:四家机构服务特点与场景关注方向梳理
大数据·人工智能·tcp/ip·精选
sbjdhjd13 小时前
SQL 注入零基础详解:原理、手工注入流程与 Sqli-Labs 靶场实战1~5关和第9关思路
数据库·sql·计算机网络·web安全·网络安全·网络攻击模型·安全架构
栋***t13 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
Xzaveir_77714 小时前
企业号码负面标记治理:认证、申诉与合规事件的三轨模型
大数据·网络·人工智能·科技·产品经理
hnsoyon14 小时前
智慧管廊综合管理平台赋能排水管网监测精细化管理
大数据·人工智能·智慧管廊综合管理平台·排水管网监测
数智化管理手记14 小时前
预算控制手工核对效率低?预算控制数字化落地实操如何做?
大数据·网络·数据库·人工智能·数据挖掘
慾玄15 小时前
sql注入靶场1-5,9关
数据库·sql
千桐科技15 小时前
DataX 执行引擎正式加入:qData 开源版 v1.6.0 新增 Quartz + DataX 轻量运行模式!
java·大数据·开源·数据治理·数据中台·qdata
lupai15 小时前
汽车维保记录精准版 API 快速接入指南
大数据·人工智能·汽车