hive分区、分桶、视图、侧视图
发布日期:2021-05-10 03:44:32 浏览次数:24 分类:精选文章

本文共 2167 字,大约阅读时间需要 7 分钟。

hive分区

在大数据处理中,分区表是hfds文件系统中常用的逻辑组织方式。分区表将一个大数据集按照业务需求划分为若干独立的分区,每个分区包含特定范围的数据文件。这在查询时可显著提升效率,因为只需访问特定的分区文件就能快速获取所需数据。

创建分区表(静态分区)

在hive中创建分区表的关键在于使用PARTITIONED BY关键字。以下是一个简单的创建实例:

```raw create table dept_par(deptno int, dname string, loc string) partitioned by (day string) row format delimited fields terminated by ‘\t’; load data local inpath ‘/opt/data/dept1.txt’ into table dept_par partition(day=‘2020-10-25’); load data local inpath ‘/opt/data/dept1.txt’ into table dept_par partition(day=‘2020-10-26’); load data local inpath ‘/opt/data/dept1.txt’ into table dept_par partition(day=‘2020-10-27’); ```

分区查询

指定分区查询可以通过WHERE子句实现。例如,查询特定日期的数据:

```sql select * from dept_par where day=‘2020-10-25’; ```

动态分区

hive支持动态分区,允许在查询时自动划分分区。为了实现动态分区,可以在查询前设置以下参数:

```bash set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; set hive.mapred.mode=nonstrict; set yarn.scheduler.minimum-allocation-mb=1024; set hive.exec.max.dynamic.partitions.pernode=20000; ```

hive分桶

分桶(Bucketing)是将数据按照特定列的值进行哈希分布到多个桶中,使数据存储更加均匀。与分区不同,分桶是基于文件的组织方式。以下是一个分桶表的创建示例:

```sql create table stu_buck(id int, name string) clustered by (id) into 4 buckets row format delimited fields terminated by ‘\t’; load data local inpath ‘/opt/data/stu.txt’ into table stu_buck; ```

分桶规则

每条记录都会根据分桶字段的值计算哈希值,并按模运算确定其存储桶。默认情况下,分桶字段必须是表中已有的列,且分桶的个数最好为2的n次方。

抽样

抽样是一种有效的数据获取策略,可以根据需要从大数据集中快速获取代表性样本。推荐使用以下命令进行列指定抽样:

```sql select * from table_name tablesample(bucket 3 out of 32 on id) s; ```

区别

分区与分桶的主要区别在于数据组织方式:

- 分区基于文件路径,文件夹包含分区数据。 - 分桶基于特定列,数据分布在多个文件中。

分桶支持伪分桶(在reduce任务数量与桶数不一致时),但建议设置reduce任务数量与桶数一致以提升效率。

视图

视图是一种虚拟表,通过子查询、连接和函数逻辑定义在现有表数据上。其特点包括:

- 只定义视图,不存储数据。 - 删除或修改基础表会影响视图。 - 视图是只读的,不能插入数据。

视图操作

- 创建视图:`create view 视图名 as select ...;` - 查询视图:`show views;` - 删除视图:`drop view 向量ORIZON;` - 更改视图:`alter view 视图名 set tblproperties('comment'='...');`

辅助函数

分区和分桶中常用到的辅助函数包括:

- `LATERAL VIEW`: 用于将结果与数据连接,使其成为查询的一部分。 - `SPLIT`: 按字符或正则表达式切分字符串。 - `EXPLODE`: 将数组或多值字段展开为多行记录。

以下是一个实际使用示例:

```sql select rename, age from demo lateral view explode(split(name,’,’)) demo as rename; ```

总结

在实际应用中,分区和分桶是hive中常用的优化手段。选择适合的分区方式(静态或动态)和分桶策略,能够显著提升查询效率。同时,视图的合理使用可以帮助简化复杂查询和保护数据隐私。

上一篇:scala安装、与java、jvm关系、源文件解析、伴生对象扩展说明
下一篇:数据仓库、数据仓库和数据库的区别、数据仓库分层

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月10日 19时30分38秒