hive分区表 静态分区和动态分区

一、静态分区

现有数据文件 data_file 如下:

2023-08-01,Product A,100.0

2023-08-05,Product B,150.0

2023-08-10,Product A,200.0

1、创建分区表

sql 复制代码
CREATE TABLE sales (
    sale_date STRING,
    product STRING,
    amount DOUBLE
)
PARTITIONED BY (sale_year INT, sale_month INT);

2、加载数据文件到分区表中

sql 复制代码
LOAD DATA INPATH '/path/to/data_file'
INTO TABLE sales
PARTITION (sale_year=2023, sale_month=8);

二、动态分区

现有源数据表如下:

CREATE TABLE sales_source (

sale_date STRING,

product STRING,

amount DOUBLE

);

INSERT INTO sales_source VALUES

('2023-08-01', 'Product A', 100.0),

('2023-08-05', 'Product B', 150.0),

('2023-08-10', 'Product A', 200.0),

('2023-08-12', 'Product C', 120.0),

('2023-08-15', 'Product B', 180.0);

1、创建分区表

sql 复制代码
CREATE TABLE sales (
    sale_date STRING,
    product STRING,
    amount DOUBLE
)
PARTITIONED BY (sale_year INT, sale_month INT);

2、实现动态插入

sql 复制代码
INSERT INTO sales PARTITION (sale_year, sale_month)
SELECT sale_date, product, amount, YEAR(sale_date), MONTH(sale_date)
FROM sales_source
WHERE sale_date BETWEEN '2023-08-01' AND '2023-08-15';

三、总结

动态分区:

在动态分区中,分区值是根据插入的数据动态计算得出的 ,无需事先创建分区目录。这样的分区方式更加灵活,适用于数据分布不确定或分区值频繁变化的情况。动态分区操作通常会涉及到 MapReduce 任务。

静态分区:

在静态分区中,你在创建表时预先定义了分区值,并手动创建了相应的分区目录。这意味着你需要为每个可能的分区值手动创建一个目录,然后将数据加载到这些目录中。静态分区需要事先知道数据应该放置在哪些分区中,适用于在创建表时已经确定分区结构的情况。

二者的使用场景:

静态分区的使用场景:

  1. 已知分区值: 当数据的分区值在创建表时已经确定,并且不太可能频繁变化时,静态分区是一个较好的选择。

  2. 精确控制和性能: 静态分区允许你精确地控制数据的存储位置,以及在查询时可能提供更好的性能,尤其在大量数据的情况下。

  3. 预先加载: 如果你有大量数据需要加载,并且已经知道数据应该放置在哪些分区中,可以提前创建分区目录,然后一次性加载数据。

动态分区的使用场景:

  1. 未知分区值: 当分区值在插入数据时才能确定,或者可能频繁变化时,动态分区提供了更大的灵活性。

  2. 自动计算分区值: 动态分区可以自动计算分区列的值,避免了手动计算和指定的麻烦。

  3. 灵活性: 如果需要从另一个表或外部数据源选择数据并插入到分区表中,动态分区可以更方便地进行批量操作。

  4. 减少手动操作: 动态分区减少了手动创建分区目录的需求,使数据加载过程更自动化。

总的来说,静态分区性能更好,动态分区更加方便 更加灵活

综合考虑,你可以根据数据的特点、分区值的变化频率、数据加载需求和查询性能等因素来选择适合你的分区方式。在一些情况下,也可以结合使用两种分区方式,以满足不同的数据管理和查询需求。

相关推荐
BD_Marathon16 小时前
设置hive本地模式
数据仓库·hive·hadoop
Data 31716 小时前
Hive数仓操作(十一)
大数据·数据库·数据仓库·hive·hadoop
Data 31718 小时前
Hive数仓操作(九)
大数据·数据仓库·hive·hadoop
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑18 小时前
JavaWeb(二)
java·数据仓库·hive·hadoop·maven
Data 3171 天前
Hive数仓操作(三)
大数据·数据库·数据仓库·hive·hadoop
Data 3171 天前
Hive数仓操作(十四)
大数据·数据库·数据仓库·hive·hadoop
Data 3171 天前
Hive数仓操作(十五)
大数据·数据库·数据仓库·hive·hadoop
Data 3171 天前
Hive数仓操作(七)
大数据·数据库·数据仓库·hive·hadoop
Data 3172 天前
Hive数仓操作(四)
大数据·数据库·数据仓库·hive·hadoop
Mephisto.java2 天前
【大数据入门 | Hive】Join语句
数据仓库·hive·hadoop