在 Hive 表中使用多个值进行分区?

Posted

技术标签:

【中文标题】在 Hive 表中使用多个值进行分区?【英文标题】:Partitioning in Hive table with multiple values? 【发布时间】:2018-10-11 11:15:59 【问题描述】:

我想创建一个简单的 hive 分区表并有一个 sqoop 导入命令来填充它。

1.Table 有 4 列,ID、col1、col2、col3。

    其中一列说 col2 是 int 类型,只包含 1 到 10 的值。

    我需要根据 col2 列对表进行分区,其中 1 到 5 个值的数据应该在一个分区中,而在另一个分区中。

我目前正在尝试这个不起作用: alter table tblname add partition (col2=1,col2=2,col2=3,col2=4,col2=5) location 'Part1';

    完成后,我需要使用从我的 sql 服务器导入的 sqoop 填充此表。

我尝试了很多方法,但无法做到。有人可以帮忙吗?

【问题讨论】:

考虑使用静态分区。创建表,alter table 创建分区,然后将数据加载到特定的分区中 Bala 是否可以根据我在第 3 点的要求和 sqoop 命令根据第 4 点的要求来帮助创建分区的命令?我尝试了很多选项,但没有发现任何工作。 【参考方案1】:

创建分区表并手动添加分区,例如1_to_3

create table ptable(name string) partitioned by (id string);
alter table ptable add partition (id='1_to_3');

show partitions ptable;
+------------+--+
| partition  |
+------------+--+
| id=1_to_3  |
+------------+--+

我知道如果部门 id 为 1 或 2 或 3,我应该将部门表中的数据加载到此分区中。

insert into ptable partition(id = '1_to_3') select department_name from departments where department_id between 1 and 3;

看截图

select * from ptable;
+------------------+------------+--+
|   ptable.name    | ptable.id  |
+------------------+------------+--+
| Marketing        | 1_to_3     |
| Finance          | 1_to_3     |
| Human Resources  | 1_to_3     |
+------------------+------------+--+

您可能需要添加另一个分区来保存其他值,例如 department_id > 3

【讨论】:

以上是关于在 Hive 表中使用多个值进行分区?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 Hive 表的分区内有分区吗?

Hive 分区、分桶和排序表 - 多个插入

hive获取多个分区表的数据与其他数据库有啥异同?

在 Impala/Hive 中删除多个分区

Hive - 仅获取一个或多个 hive 表的最新分区

Hive分区与桶表