Hive 分区分桶

1.分区
Hive(Inceptor)分区又分为单值分区、范围分区。单值分区又分为静态分区和动态分区。我们先看下分区长啥样。如下,假如有一张表名为persionrank表,记录每个人的评级,有id、name、score字段。我们便可以创建分区rank(注意rank不是表中的列,我们可以把它当做虚拟列),并将相应数据导入指定分区(将数据插入指定目录)。

1.1创建分区表
在Hive中,可以使用PARTITIONED BY关键字来创建分区表。以下是创建分区表的示例:

CREATE TABLE my_table (
  col1 INT,
  col2 STRING
)
PARTITIONED BY (dt STRING, country STRING);


1.2插入分区数据
在向分区表中插入数据时,需要指定分区列的值。以下是向分区表插入数据的示例:

INSERT INTO my_table PARTITION (dt='2023-01-01', country='China')
VALUES (1, 'data1'), (2, 'data2');


1.3查询分区数据
查询分区表的语法与普通表类似,可以使用SELECT语句查询特定分区的数据。以下是查询分区表数据的示例:

SELECT col1, col2
FROM my_table
WHERE dt='2023-01-01' AND country='China';


2.分桶
对Hive(Inceptor)表分桶可以将表中记录按分桶键的哈希值分散进多个文件中,这些小文件称为桶。

2.1创建分桶表
我们先看一下创建分桶表的创建,分桶表的建表有三种方式:直接建表,CREATE TABLE LIKE 和 CREATE TABLE AS SELECT ,单值分区表不能用 CREATETABLE AS SELECT 建表。

CREATE TABLE my_bucketed_table (
  col1 INT,
  col2 STRING
)
CLUSTERED BY (col1) INTO 4 BUCKETS
SORTED BY (col2);


分桶键只能有一个即<col_name>。表可以同时分区和分桶,当表分区时,每个分区下都会有<num_buckets> 个桶。我们也可以选择使用 SORTED BY … 在桶内排序,排序键和分桶键无需相同。ASC 为升序选项,DESC 为降序选项,默认排序方式是升序。<num_buckets> 指定分桶个数,也就是表目录下小文件的个数。

1.2插入分桶数据
在向分桶表中插入数据时,需要使用INSERT OVERWRITE语句,并指定桶的编号。以下是向分桶表插入数据的示例:

INSERT OVERWRITE TABLE my_bucketed_table
SELECT col1, col2
FROM my_table;


1.3查询分桶数据
查询分桶表的语法与普通表类似,可以使用SELECT语句查询特定桶的数据。以下是查询分桶表数据的示例:

SELECT col1, col2
FROM my_bucketed_table
WHERE col1=1;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值