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

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

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

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

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

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

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

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

【问题讨论】:

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

标签: hive sqoop


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多