hive-分桶-索引(初篇)

本文详细讲解了Hive中创建分桶表、抽样策略及索引管理,以提升数据处理效率。

hvie - 分桶

  • 创建分桶表之前要先设置hive允许进行强制分桶配置

set hive.enforce.bucketing=true
  • 创建分桶表

create table tmp_bucket(id int,
                        name String) 
                        clustered by (id) into 4 buckets    
  • 建表

  • 其中x表示分几个桶进行抽样,y表示间隔几个桶进行一次分桶

select columns 
from  table tablesample(bucket x out of y on column);
  • 进行抽样

select id,name from tmp_bucket tablesample(bucket 1 out of 2 on id);
  • 像分桶表加载数据

insert overwrite table tmp_bucket 
select id,name from source_data;
# 其中的source_data 表中的数据一定是提前分好桶的
​
  • 查询分桶表 - > 高效抽样 , 通过桶号进行抽样

select * from tmp_bucket where name in (select name from tmp_bucket distribute by rand() into 3 butkets);   

hive-索引

  • 刚创建完hive的索引表是数据的, 需要生成索引数据

alter index 索引名称 on table_name rebuild;
  • 查看索引

show  formatted index on table_name

这篇文件未完成待续哦 ......

### Hive 的概念及使用方法 #### 什么是Hive 中的是一种用于组织数据的技术,它通过对指定列的值进行哈希运算,并将其配到不同的中。这种技术有助于提升查询性能,尤其是在大规模数据集上执行连接操作时[^1]。 #### 创建创建一个,需要在 `CREATE TABLE` 语句中定义 `CLUSTERED BY` 子句。以下是创建的基本语法: ```sql CREATE TABLE bucketed_table ( id INT, name STRING, value DOUBLE ) CLUSTERED BY (id) INTO 32 BUCKETS; ``` 上述代码片段展示了如何创建一张名为 `bucketed_table` 的,其中 `id` 列被用来作为依据,整个会被为 32 个[^3]。 #### 填充 为了使生效,在向插入数据时,必须启用动态功能并设置相应的参数。以下是一些常用的配置项及其含义: - `set hive.enforce.bucketing = true;`: 启用强制模式。 - `SET hive.exec.dynamic.partition.mode=nonstrict;`: 设置动态区模式为非严格模式(如果涉及区)。 下面是一个完整的示例,展示如何将数据写入: ```sql -- 开启支持 SET hive.enforce.bucketing = true; -- 插入数据到 INSERT OVERWRITE TABLE bucketed_table SELECT * FROM source_table DISTRIBUTE BY id; ``` 在此过程中,`DISTRIBUTE BY` 关键字确保每一条记录按照 `id` 列的值均匀布到各个中。 #### 查询优化 当两张已经按相同的字段(如 `id` 字段)进行 JOIN 操作时,无需再对整张做笛卡尔积,从而显著减少计算量和资源消耗[^2]。 #### 抽样查询 除了常规查询外,还可以通过抽样的方式访问部的内容。例如,假设某有 64 个,则可以通过如下 SQL 获取第 3 个的数据样本: ```sql SELECT * FROM bucketed_table TABLESAMPLE(BUCKET 3 OUT OF 32); ``` 这里需要注意的是,实际抽取的具体号取决于达式的逻辑关系[^4]。 #### Spark 集成 对于更复杂的析需求,可借助 Apache Spark 来读取 Hive 并实施高效的无 shuffle Join 操作。这通常涉及到调整 Spark 应用程序的相关属性以匹配底层存储结构[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值