Hive关联表

使用Hive时,创建关联表
CREATE EXTERNAL TABLE hisdata201908(key string, di string,dn string,li int,ln string,
mi string,mk string,mn string,mv string,pn string,rt string,sn string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,d:di,d:dn,d:li,d:ln,d:mi,d:mk,d:mn,d:mv,d:pn,d:rt,d:sn”)
TBLPROPERTIES (“hbase.table.name” = “hisdata201908”);

### Hive 中大小表 Join 的最佳实践 #### 优化 Join 性能的关键因素 为了提升 Hive 查询中大表和小表连接操作的效率,建议采用以下几种方法: - **启用 Map-side Join**:通过设置 `hive.auto.convert.join.noconditionaltask` 参数为 `true`,可以让 Hive 自动识别并转换适合的小表到内存中的 Hash 表来执行 map-side join。这通常会显著减少作业时间[^2]。 ```sql SET hive.auto.convert.join.noconditionaltask=true; ``` - **调整广播阈值**:默认情况下,只有当小表小于一定字节时才会被自动加载至内存参与 map-side join。可以通过修改配置项 `hive.mapjoin.smalltable.filesize` 来控制这个临界值,默认是 25MB 左右。如果确认某个表确实很小且频繁用于 join,则可适当降低此参数以便更积极地应用 map-side join 技术。 ```sql SET hive.mapjoin.smalltable.filesize=10485760; -- 设置为 10 MB ``` - **统计信息收集**:确保启用了列级别的统计数据采集功能 (`hive.stats.fetch.column.stats`) 和原始数据量统计(`hive.stats.collect.rawdatasize`) ,这样可以帮助查询规划器更好地评估成本从而做出最优决策[^3]。 ```sql SET hive.stats.fetch.column.stats=true; SET hive.stats.collect.rawdatasize=true; ``` - **分区剪枝与分桶处理**:利用分区字段过滤掉不必要的输入文件;而针对较大的事实表可以选择合适的低基数维度属性作为 bucketing key 进行预聚合,以此加速后续计算过程[^1]。 #### 实际案例分析 假设存在一张订单详情表(order_details),其规模较大,并且有一张商品类别映射关系表(product_categories),相对较小。此时要获取每种类别的销售总额,可以按照上述原则编写 SQL 如下所示: ```sql -- 前置准备:开启必要的性能调优选项 SET hive.auto.convert.join.noconditionaltask=true; SET hive.mapjoin.smalltable.filesize=10485760; SELECT pc.category_name, SUM(od.amount) AS total_sales FROM order_details od JOIN product_categories pc ON od.product_id = pc.product_id GROUP BY pc.category_name; ``` 在这个例子中,因为 `product_categories` 是个小表,所以会被自动转化为 hash table,在 map 阶段完成 join 操作,进而提高了整体运行速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值