您的位置:首页 > 数据库

HiveSql(1)mapjoin、分区表

2016-01-08 17:10 357 查看
mapjoin、分区表、不等值匹配
业务需求:

A表,小表,穷举的100个动漫电影的IP,表结构ip(id string, key string)

B表,大表,每天的交易数据,上亿条,表结构order(ds string, item_titlestring,buyer_id string, fee string)

现在想要得到这100个动漫电影相关产品的每天的销售额、购买人数。

SQL:

1、建表

create table if not exists jieguo

(

ds string,

fee string ,

cnt string

)

partitioned by (pt string )

2、跑数据

Insert overwrite table jieguo partition (pt=201503)

Select /*+MAPJOIN(a)*/

b.ds,sum(b.fee),count(b.buyer_id)

from ip b

Join

(Select ds, fee,buyer_id

From order

Where ds>=20150101 and ds<=20150331

)b

On instr(b.item_title,a.key)>0

Group by b.ds

学习要点:

1、/*+MAPJOIN*/的用法

如果关联的2张表大小差距悬殊或者进行不等值连接时,一般的join会导致运行速度很慢,使用mapjoin可以有效提高效率

使用场景:

(1)关联操作中的一张表非常小

(2)不等值连接

Select /*+MAPJOIN(a)*/,括号里加的是小表的名称

2、分区表

如果输出的数据比较多,可以采取分区的形式

建表时加一条语句partitioned by

跑数据时Insert overwrite table jieguo partition (pt=201503)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: