您现在的位置是:首页 >技术杂谈 >黑马在线教育数仓实战6网站首页技术杂谈

黑马在线教育数仓实战6

Amazingmonkeys 2023-05-23 08:00:02
简介黑马在线教育数仓实战6

6. 意向用户主题看板_增量流程

6.1 数据采集(拉链表)

7. hive的索引

​ 索引的作用: 加快查询的效率

为什么索引可以提升查询效率呢?

hive索引是在 分区 分桶优化基础上, 又提供一种新的优化手段, 如果分区 和分桶受限, 可以尝试使用索引的方式来优化处理

hive提供了三种索引:

  • 原始索引
  • row group index(行组索引)
  • bloom filter index(布隆过滤索引)

7.1 hive的原始索引

​ 结论: 此索引已经不再使用, 在hive3.0以上, 彻底不支持

    hive的原始索引, 可以针对表中某一列或者某几列构建索引, 构建之后, 当查询的时候使用到索引字段, 可以帮助提升一定效率
    弊端: 
        hive原始索引, 不会自动更新, 每一次对表中数据进行处理后, 都需要进行重建索引, 而这个效率是比较差, 而且整体效率的提升,相对比较有限 

7.2 row group index(行组索引)

 

条件:
    1) 要求表必须是ORC存储格式
    2) 需要对那个字段进行索引, 必须对这个字段进行排序, 否则索引意义不大
    3) 在创建表的时候, 必须开启行组索引: ’orc.create.index’=’true’
    4) 主要应用在 < > = 场景中, 主要针对数值类型数据 

建表操作: 
CREATE TABLE lxw1234_orc2(
    ....
) stored AS ORC
TBLPROPERTIES
(
    'orc.compress'='SNAPPY',
--     开启行组索引
    'orc.create.index'='true'
)

插入数据:
    SELECT CAST(siteid AS INT) AS id,
    pcid
    FROM lxw1234_text
--     插入的数据保持排序
    DISTRIBUTE BY id sort BY id;

7.3 bloom filter index(布隆过滤索引)

条件:
    1) 必须是ORC类型的表
    2) 需要按照哪一个字段进行等值连接, 需要对这个字段构建布隆索引
    3) 仅适合做等值连接, 不局限于数据类型
    4) 在建表的时候, 必须指定为那些字段开启: ”orc.bloom.filter.columns”=”pcid,字段2..” 

如何使用:
CREATE TABLE lxw1234_orc2 (
   ....
) stored AS ORC
TBLPROPERTIES
(
    'orc.compress'='SNAPPY',
    'orc.create.index'='true',
--     pcid字段开启BloomFilter索引
    "orc.bloom.filter.columns"="pcid"
)

插入数据: 
SELECT CAST(siteid AS INT) AS id,
pcid
FROM lxw1234_text
DISTRIBUTE BY id sort BY id;


使用索引:
SET hive.optimize.index.filter=true --开启 hive的自动使用索引
SELECT COUNT(1) FROM lxw1234_orc1 WHERE id >= 0 AND id <= 1000   (行组索引)
AND pcid IN ('0005E26F0DCCDB56F9041C','A'); (布隆过滤索引)

注意 如果要使用hive的索引, 必须开启hive自动使用索引

SET hive.optimize.index.filter=true --开启 hive的自动使用索引

当然也可以将这个配置, 直接配置到cm的hive的配置窗口中, 进行统一配置 

在生产中这些索引如何选择呢?

1) 对于行组索引, 建议是常开即可
    在插入数据, 如果不明确对那个字段使用行组索引, 可以任意的插入, 在条件合适情况下, 也在使用行组索引

2) 布隆过滤索引:  主要将那些用于 等值连接的字段开启索引即可
    一般主要指的是 join关联字段 以及清洗字段 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。