Hive的自定义函数与优化
1,自定义函数
2.数据的分桶
- 分区
- 可以将常用的属性进行分区,会自动创建文件夹
- 然后根据相同分区的数据会放在同一个文件夹中,如果按照分区条件查询,只需要查询指定的文件目录
- 如果分区的数据散列比较好,这时分区就会产生很多个分区,而且每个分区内的数据寥寥无几
- 所以分区比较适合列值比较固定的
- 分桶
- 算法类似于Map中的partation操作(计算Key的Hash然后对ReduceNum取余)
- 分区可以通过文件夹的方式将数据存放在不同的目录,但并不是所以的数据都适合分区
- 那么我们可以将不合适分区的数据(散列均匀)进行分桶
- 分桶一般会使用文件来管理数据
- abs(hash(col))%bucketNum = x
- 那么相同桶的数据会存放在同一个文件
- 如果分桶的列值范围比较固定,不推荐使用分桶,即使桶再多也无法分出(例如:性别,省份)
- 总结
- 优点
- 减少了查询范围
- 数据抽样
- Map-Join(两张表可以同时对一个常用查询列做相同个数的桶,那么比较的时候只需要一一对应即可)
1,zhangsan1,g1,clazz1
2,zhangsan2,g2,clazz2
3,zhangsan3,g3,clazz3
4,zhangsan4,g0,clazz4
5,zhangsan5,g1,clazz5
6,zhangsan6,g2,clazz6
7,zhangsan7,g3,clazz7
8,zhangsan8,g0,clazz8
9,zhangsan9,g1,clazz9
10,zhangsan10,g2,clazz0
11,zhangsan11,g3,clazz1
12,zhangsan12,g0,clazz2
13,zhangsan13,g1,clazz3
14,zhangsan14,g2,clazz4
15,zhangsan15,g3,clazz5
16,zhangsan16,g0,clazz6
17,zhangsan17,g1,clazz7
18,zhangsan18,g2,clazz8
19,zhangsan19,g3,clazz9
20,zhangsan20,g0,clazz0
21,zhangsan21,g1,clazz1
22,zhangsan22,g2,clazz2
23,zhangsan23,g3,clazz3
24,zhangsan24,g0,clazz4
25,zhangsan25,g1,clazz5
26,zhangsan26,g2,clazz6
27,zhangsan27,g3,clazz7
28,zhangsan28,g0,clazz8
29,zhan