【技术帖】KAP 2.4新特性:可计算列 Computed Colum

日期:2019-10-04编辑作者:星座

在上一篇介绍可计算列的文章中,我们对可计算列的基本使用做了全面的介绍(详情点击:【技术帖】KAP 2.4新特性:可计算列 Computed Column),今天,本文将着重介绍如何在可计算列中结合Hive UDF实现更多扩展计算。

源数据中没有你想要的数据?源数据中的列不能满足分析所需要的格式?这些问题,在KAP v2.4版本中都得到了修复!你可以用KAP生成新的可计算列,并把它应用在Cube中,利用Cube预计算而获得性能优势。今天,我们将详细介绍可计算列的使用方法。

什么是UDF?

Kyligence Analytics Platform (KAP) 大数据智能分析平台是基于Apache Kylin的,在超大数据集上提供亚秒级分析能力的企业级数据仓库产品,为业务用户、分析师及工程师提供简便、快捷的大数据分析服务。在继承Apache Kylin的高性能查询、易用建模,多协议支持、非侵入式架构等突出优点的同时,KAP在企业用户所关注的实施效率、安全可控、性能优化、自助式敏捷BI、系统监控等方面进行了全方位的创新,被誉为目前最为成熟的OLAP on Hadoop产品。

UDF即User defined function,用户定义函数,当Hive中自带的函数不能满足用户对数据计算、处理的需求时,KAP的可计算列还支持内置使用Hive UDF,从而进一步扩展可计算列的功能。

概念介绍

彩世界,下面我们就用一个案例给大家介绍如何在KAP中结合Hive UDF使用可计算列。

如果你的源数据中没有你想要的数据,或者源数据中的列不能满足分析所需要的格式,现在你可以用KAP生成新的可计算列,并把它应用在Cube中,以利用Cube预计算而获得性能优势。举个例子,你可以使用销量减去成本计算出利润,或者你可以把数字文字混合的字段拆分成两个可计算列,你也可以使用函数对数据的类型进行转换。

准备工作

你可以利用源数据中的字段搭配运算符或函数定义可计算列,如A= B*C 或A= Year (B)。可计算列是定义在KAP(Kylin)数据模型层上的,可计算列定义后在Cube构建阶段和一般源数据列无异,也会被一起进行预计算,这样一方面方便分析师灵活自主的创建所需的可计算列,另一方面也使可计算列利用预计算技术,充分发挥Cube的性能优势。

首先我们以一个用户表为例,如下图所示的数据:

可计算列是KAP 2.4新推出的一个功能,下面我们就将详细介绍可计算列的使用方法。

图 1

使用引导

我们已经获得用户的一部分个人信息:姓名、性别、年龄、省份等,但是实际分析中了可能我们希望获得用户的更多人信息如用户的星座,用户姓名的拼音等。通过使用第三方的Hive UDF我们可以从已有的个人信息中提取出更多需要的信息。Hive自带的函数无法实现对星座,拼音等特殊信息进行提取,因此我们需要依赖第三方UDF进行处理。

我们以Learn_kylin这个KAP自带的样例数据集为例子,介绍如何使用可计算列。关于样例数据集的具体介绍可以参考KAP用户手册中的介绍,这里不再做详细介绍。

Github上的Hive Third Function(

在KAP中打开learn_kylin自带的数据模型,点击下图箭头所示的计算器按钮,就可以创建可计算列。

安装 UDF包

首先我们建立几个可计算列:

在网页 third function的jar 包,将jar包解压缩放到系统环境的目录中。

total_sales=priceitem_count
*

图 2

part_year= year (part_dt)

把引用UDF jar包的语句放入${HOME}/.hiverc 文件中:

part_month =month (part_dt)

vi .hiverc

其中需要填写:

图 3

·       列:定义可计算列的名称

启动hive测试UDF是否已经正确加载:

·       表达式:可计算列的表达式定义。注意:允许使用当前表上的列进行计算,暂不支持跨表的表达式

select pinyin('中国');

·       数据类型:定义可计算列的返回结果类型

select zodiac_cn('1989-01-08');

参考下图我们可以创建这三个可计算列。

图 4

这样我们就在数据模型中生成了几个可计算列,下面不要忘记给可计算列定义数据类型,在Kylin_Sales表中下拉到列表最下方可以看到刚才定义的可计算列,在列名左侧点击切换列为度量或者维度。

如果上图中的函数能够正常返回结果,说明UDF函数jar包已经正确加载完成。下面我们就可以直接在可计算列中使用这些第三方的函数了。

其中Total_sales为度量(Measure)设置为字母M,Part_Year和Part_Month为维度,设置为D。

在KAP可计算列中使用UDF函数

在模型中定义完可计算列后,需要在创建Cube添加维度/度量的时候选入可计算列,可计算列被放在Cube中预计算后,才能利用上Cube的性能优势。

首先在KAP中将目标的用户表进行同步。

Cube构建好后就可以使用可计算列了,可以在KAP的分析页面中测试一下,在可查询的列表中,可以看到之前定义的可计算列PART_YEAR, PART_MONTH和 TOTAL_SALES

图 5

接下来我们在KAP的分析页面中运行一段SQL测试一下:

创建模型。

select part_year

图 6

,part_month

在模型中引用UDF函数创建姓名拼音、星座等可计算列。这些可计算列所使用的函数列表如下,下面的函数都是来自前文加载的UDF包。

, sum(total_sales) as total_sales

图 7

from kylin_sales

创建可计算列将用户姓名转化成拼音。

group by part_year

pinyin(name)

,part_month

图 8

如下图所示,可以看到在模型中定义的可计算列PART_YEAR, PART_MONTH和 TOTAL_SALES可以正常返回结果了。

创建可计算列从用户生日中获取星座:

使用Tableau连接KAP,运行同一查询也可返回结果,这样就可以把可计算列中计算出来的额外字段应用在分析中了。

zodiac_cn(BIRTHDAY)

可计算列使用的一些规则

图 9

·       KAP 2.4中,仅支持在事实表上定义可计算列(暂不支持跨表定义或在维度表上定义)。

所有模型及可计算列都定义完毕后,相应的创建Cube。

·       用户可以在多个模型上定义不同的可计算列。

图 10

·       同一张表中,可计算列的名字和表达式(计算逻辑)是一一对应的。

Cube构建好后在分析页面调用users表中的数据。

利用隐式查询使用可计算列

图 11

在一个表上创建了可计算列后,逻辑上这个可计算列就被加入到了这个表的列集合中。用户可以像查询普通的列一样查询这个列。在上面的kylin_sales例子中,如果用户创建并构建了一个包含sum(total_sales)度量的cube,用户可以直接查询select sum(total_sales) from kylin_sales。我们将这种查询方式成为可计算列的显式查询。

可以看到所有的可计算列都已经计算出来了。

另一方面,由于不少查询语句是BI工具自动生成的,并不能直接显式使用可计算列。这种情况下,KAP支持直接使用可计算列背后的表达式进行查询。接着上面的例子,用户可以查询select sum(price*item_count) from kylin_sales。KAP会分析到price*item_count可以由可计算列total_sales替代,且sum(total_sales)已经在某个cube中被预计算完毕,为了更好的性能,KAP会将用户原始查询重写为select sum(total_sales) from kylin_sales,以求更佳的性能。我们将这种查询方式称为可计算列的隐式查询。

本文由彩世界发布于星座,转载请注明出处:【技术帖】KAP 2.4新特性:可计算列 Computed Colum

关键词:

抱猫占星三月星座运势二:巨蟹狮子处女篇

今年广州的冬天好暖和呀,今天最高温度都有20度呢,mia的猫咪们在阳台上晒太阳可舒服啦~ ...

详细>>

2014,快滚吧!

彩世界,      为自己注册了简书的账号,本想只在这里做一个偷窥者、过路者。今天突然也萌生了写一篇文章的冲...

详细>>

我对你的感情,比一场爱恋更长久

岁月溜走,只剩回忆 2017年1月8号 彩世界,我有个从穿开裆裤时候就认识的“青梅竹马”,他比我大两个月,确跨了一...

详细>>

支付风控系统设计:风控数据仓库建设(二)

转载: 支付风控系统在数据存储设计上和其它业务不同的地方在于数据获取与使用的流程。一般业务系统会先确定系...

详细>>