Kylin 中 bigint引发的全局字典问题

693 阅读1分钟

背景

全局字典

  • 用于解决 Count distinct 场景
  • 构建全局唯一的连续ID
  • 基于bitmap,将string 类型转为int

弊端:如果使用Global Dictionary的话全局字典会越来越大,构建也会越来越慢。

构建

  1. 在构建时,一个 bigint 类型的字段,做 Count distinct 并选择了精准计算。

image.png

  1. 发现kylin 增加了全局字典。

image.png

  1. 问题:理论上 String 才会转为int 类型,bigint 不需要

排查

查看源码发现,字段只能为 “tinyint” "smallint" "int" "integer" 四种类型。

image.png

源码地址:github.com/apache/kyli…

image.png

源码地址:github.com/apache/kyli…

解决

目前 hive 中存储的数据为 bigint 格式,而int 类型可以存储20亿+ 数据,改为int 类型可以满足当前表需求。

Alter table [table_name] change column [old_colum_name] [new_colum_name] [new_colum_type]

遗留的问题

官方建议,集群模式部署的时候,只能有一个“all(job+query)”或者 “job”。部署 3 台 “all” 的话,全局字典会出现构建失败的情况。

image.png