hive -- 分区,分桶(创建,修改,删除)

本文详细介绍了Hive中的分区和分桶概念,包括静态和动态创建分区,以及分区的修改和删除。同时,讨论了分桶的作用,如提高查询效率和支持高效连接,并展示了创建和操作分桶的步骤。通过实例演示了如何在Hive中进行分区和分桶操作,以实现数据管理和查询性能的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                hive -- 分区,分桶(创建,修改,删除)


分区:

    静态创建分区:

  1. 数据:


john doe	10000.0
mary smith	8000.0
todd jones	7000.0
boss man	20000.0
freed finance	15000.0
stacy saber	4000.0

建表+添加一个数据

create table if not exists employees(
name string,
money float)
row format delimited fields terminated by '\t'
stored as textfile;

load data local inpath '/home/data/employees.txt' into table employees;

问题:查询工资在8000元到10000元之间的人和工资

select *
from employees
where money between 8000 and 10000;


问题:按照工资添加新列,少于5000元的添加low,5000-7000元之间的添加middle,7000-10000元的添加hight,10000元以上添加very hight

select 
name,money,
case
when money>=5000 then(
case 
when money>=7000 then(
case
when money>=10000 then 'very hight'
else 'hight' end
)
else 'middle' end
)
else 'low' end 
from employees;


2.数据(分区)


li1	man	20
li11	man	21
li12	man	18
li13	woman	19
li14	man	20
li15	woman	21
li16	woman	22
li17	man	23
li18	man	
### Hive 安装配置 Hive 的安装和配置通常涉及以下几个方面:环境准备、下载与解压、配置文件修改以及启动服务。以下是简要说明: - **环境准备**:确保已安装 Java 和 Hadoop,并设置好 JAVA_HOME 和 HADOOP_HOME 环境变量[^1]。 - **下载与解压**:从 Apache 官方网站下载最新版本的 Hive 并解压缩至目标路径。 - **配置文件修改**: - 修改 `hive-site.xml` 文件,配置元数据存储位置(通常是 MySQL 或 Derby),并指定 HDFS 路径作为默认仓库目录[^3]。 - 如果使用 MySQL,则需额外下载 JDBC 驱动程序并将驱动包放置到 `$HIVE_HOME/lib` 下。 - **启动服务**:通过命令 `schematool -initSchema -dbType mysql` 初始化元数据库;之后可以通过 `hive` 命令进入 CLI。 --- ### 内外部表的操作方法 #### 创建内部表 ```sql CREATE TABLE internal_table ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; ``` 内部表的特点是其数据由 Hive 自己管理,删除表时会自动清理对应的数据文件[^4]。 #### 创建外部表 ```sql CREATE EXTERNAL TABLE external_table ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/path/to/hdfs/data'; ``` 外部表不会在删除表的同时移除底层数据文件,仅解除关联关系。 --- ### 分区表的操作方法 分区表允许按某些字段数据子集,从而优化查询效率。创建方式如下所示: ```sql CREATE TABLE partitioned_table ( id INT, value STRING ) PARTITIONED BY (year INT, month INT); ``` 向分区表加载数据时需要显式指定分区键值: ```sql LOAD DATA INPATH '/path/to/file' INTO TABLE partitioned_table PARTITION(year=2023, month=9); ``` 对于已有数据但未分区的情况,可执行修复命令同步元数据与实际存储结构: ```sql MSCK REPAIR TABLE partitioned_table; ``` --- ### 表的操作方法 表通过对某一列进行哈希运算实现均匀布的小规模数据切片,适合用于采样析或连接操作加速。示例如下: ```sql CREATE TABLE bucketed_table ( id INT, name STRING ) CLUSTERED BY(id) INTO 4 BUCKETS; -- 将数据划为 4 个 ``` 为了使生效,在插入前应启用相应参数: ```sql SET hive.enforce.bucketing = true; INSERT OVERWRITE TABLE bucketed_table SELECT * FROM source_table DISTRIBUTE BY id; ``` 如果希望进一步提升性能,还可以结合排序功能一起定义规则: ```sql CREATE TABLE sorted_bucketed_table ( id INT, score DOUBLE ) CLUSTERED BY(id) SORTED BY(score DESC) INTO 5 BUCKETS; ``` --- ### 分区表与表联合使用 两者可以共同作用以达到最佳效果——先按业务逻辑割成不同区域再细化颗粒度。下面是一个综合案例: ```sql CREATE TABLE combined_partition_bucket_table ( user_id BIGINT, event_time TIMESTAMP, action STRING ) PARTITIONED BY(date STRING) CLUSTERED BY(user_id) INTO 8 BUCKETS STORED AS ORC TBLPROPERTIES('transactional'='true'); ``` 上述语句表明该表支持事务特性,采用 ORC 存储格式,并针对日期维度进行了物理隔离同时依据用户 ID 实现负载均衡[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值