目录
1.分区
1.1创建分区表
1.2插入分区数据
1.3查询分区数据
2.分桶
2.1创建分桶表
1.2插入分桶数据
1.3查询分桶数据
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;