创建cube时,最容易出错的地方就是在 Build Dimension Dictionary这步,也就是第四步。如下图
这步,kylin后台会做很多关于字段的检查。遇到的两个坑,正是发生在这步,因为数据本身有这样的问题:
第一,维度表中类型为longtext的字段description(存的描述信息,很长),其长度超出Short.MAX_VALUE(short值得范围:-32768-32767)。尽管这个字段在model和cube创建时都未加入dimensions中,但还是报错了,也就是说,kylin会检查所有维度表字段里value的长度,不管有没有加到dimensions里。报错源代码如下:
if (maxValueLength < 0) { throw new IllegalStateException("maxValueLength is negative (" + maxValueLength + "). Dict value is too long, whose length is larger than " + Short.MAX_VALUE); }
第二,建model时,一般会把事实表的外键和维度表的主键做关联,但在hive中并不存在主外键这种概念,所以维度表不管是不是主键,kylin都会检查其唯一性。否则,一张事实表的一条记录,会关联出两条或多条维度表的记录,这种情况肯定是非法的。因此,与事实表做关联的的维度表字段必须是唯一的,且非空,即为主键(但hive中不存主键这一说)。
针对上面两个坑,我们把错误日志记录下来了<