文章 查看内容

观远UDF函数

观远UDF函数

55 0 函数专题 2024-7-17 16:35 发布者: 观小凡

观远BI非直连场景支持 Spark SQL 函数,在正常情况下足够满足用户的模板制作需求,但是在一些特殊领域或场景,Spark函数无法实现或者实现比较麻烦,在这种情况下,观远BI预封装了部分自定义函数(User-Defined Funct ...
 

1. 概述

      观远BI非直连场景支持 Spark SQL 函数,在正常情况下足够满足用户的模板制作需求,但是在一些特殊领域或场景,Spark函数无法实现或者实现比较麻烦,在这种情况下,观远BI预封装了部分自定义函数(User-Defined Functions,简称UDF)来作为补充,满足更多场景更复杂的数据处理和分析要求。

2. 使用范围

  • 仅支持Guan-index抽取数据集、文件数据集等所有非直连数据集的卡片、ETL场景。

3. 常用UDF函数


类型

函数

用途

示例

结果

日期转换

weekyear(日期)

返回ISO 8601周编号年。

相当于spark组合函数:extract(yearofweek from [日期])

weekyear('2023-01-01')

2022

weekOfYearWithYear (日期)

把日期转换为文本类型的ISO 8601年周。

相当于spark组合函数:concat(year(date_add(trunc([日期],'week'),3)),'年第',weekofyear([日期]),'周')

weekOfYearWithYear('2023-01-01')

2022年第52周

日期时间计算

minutediff(结束时间,开始时间)

计算分钟差。

相当于 (unix_timestamp(结束时间)-unix_timestamp(结束时间))/60

MINUTEDIFF('2023-07-02 14:28:53', '2023-07-02 12:00:16')

148

seconddiff(结束时间,开始时间)

计算秒差。

相当于 unix_timestamp(结束时间)-unix_timestamp(结束时间)

SECONDDIFF('2023-07-02 14:28:53', '2023-07-02 12:00:16')

8917

lasting_days_to_date(日期数组,查询日期)

返回日期字段内小于等于指定日期的持续天数。

可用于计算库存缺货天数等。

lasting_days_to_date(collect_list([日期]), TO_DATE('2024-01-01'))

1

数值计算

raw_xirr(collect_list( map(日期,金额)))

不一定定期发生的现金流的内部收益率。

聚合度量。

raw_xirr(collect_list(map([日期],[金额])))

0.079

array_sum(数值数组)

对数组里的数值求和

array_sum(array(1,2,3))

6

文本处理

toPinYin(中文文本)

返回汉字对应的拼音字符(大写)。

toPinYin('重庆市')

CHONGQINGSHI

案例:

4. 时序UDF函数

观远封装好的时序UDF函数,一般用于制作拉链表,用来解决大数据量存储和查询问题,既可以保留历史数据,又可以节省空间(大幅缩减数据行数)。

类型

函数

参数

输出数据类型

说明

构建查询表字段 (ETL用)

date_range_build_v2

(struct_array)

dateRangStruct

无压缩时间序列值。参数中 struct_array 数组,需要通过 collect_list(struct(date, value)) 等函数来聚合得到。

date_text_range_build_v2

(struct_array)

dateTextRangStruct

date_range_zipper

(dateRangStruct)

dateRangStruct

相邻等值压缩的时间序列值。对缺省日期添加一条值为 null 的记录并压缩(若有缺省日期且前一个日期值不为 null,则添加与前一个日期相邻日期且值为 null 的记录,当前日期是否压缩与新添记录做比较;同时对相邻等值记录进行去重,仅保留第一条)。

date_text_range_zipper

(dateTextRangStruct)

dateTextRangStruct

date_range_merge

(dateRangStruct_1, dateRangStruct_2)

dateRangStruct

合并时间序列,合并后不压缩相邻等值。

date_text_range_merge

(dateTextRangStruct_1, dateTextRangStruct_2)

dateTextRangStruct

date_range_period_to_date

(dateRangStruct, period:string)

dateRangStruct

period: 'week','month','year' 1. 原始日期保留,值按指定周期累加;2. 为缺省周期补齐期初日期,值补零;同时对补齐的相邻等值进行压缩,仅保留第一条。适用于周期内累计值的计算和查找,例如周/月/年累计销售额。

查找数据 (卡片用)

date_range_lookup

(dateRangStruct, lookup_date)

Number value

滚动向上查找,即无对应日期数据就向前查找最近日期的数据,适合库存类数据或者会员状态的查找。

date_text_range_lookup

(dateTextRangStruct, lookup_date)

String value

date_range_get

(dateRangStruct, lookup_date)

Number value

精确查找,适合销售类数据查找;找不到则返回null。

date_text_range_get

(dateTextRangStruct, lookup_date)

String value


具体用法和案例请参考: 时序UDF函数介绍 用时序UDF制作历史拉链表

5. 注意事项:

  • UDF函数是封装在BI后端代码里,暂时不支持自由调整或者新建;如果使用过程中出现异常报错,建议联系观远技术支持团队,或者用Spark函数代替UDF函数计算。
  • 直连数据集场景,如果用户有自定义函数需求,可以在自己的数据库创建自定义函数并维护,然后在观远BI里创建数据账户,那么使用该数据账号的数据集和卡片即可以使用自定义函数。

路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2024 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部