在 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 表中使用多个值进行分区?的主要内容,如果未能解决你的问题,请参考以下文章