虚拟属性

1.功能概述

虚拟属性是指基于现有普通属性值进行二次加工,具体方式是使用SQL表达式加工而成

2.虚拟属性创建

2.1:手工新建

  • 把鼠标放到“新建属性”框上,会弹出新增虚拟属性的浮窗

新建属性下拉按钮中:新建普通属性、新建虚拟属性、批量导入创建

事件属性以及全局属性均支持创建对应类型的虚拟属性

普通属性和虚拟属性的新建入口是分开的,对已经存在属性进行编辑的时候,无法修改属性类型

image

点击"新建虚拟属性"的按钮,会弹出填写虚拟属性信息的页面,下面介绍一下新建虚拟属性需要填写的相关信息

image

  1. 基本信息:里面包含属性key、属性名称和属性描述,自定义填写即可;

  2. 属性值类型:里面有数值、字符串、字符串组三种类型表达式返回的值类型必须和配置的一致

  3. 点击【校验SQL】按钮,进行表达式校验,点击保存,会自动校验SQL,校验通过则保存成功,校验失败则无法保存,具体校验规则可参考新建虚拟属性界面中的SQL输入规则:

  4. 默认是整个组织,关掉之后,会显示出当前组织下的所有应用,可以对应用进行勾选

  • 当上述的信息填写完成之后,点击下面的“保存”按钮,一个虚拟属性就创建完成了。

2.2:批量导入

虚拟属性支持批量导入功能,在模板里面填写好属性的信息,需要填写的内容和手工新建时一样,表格模板如下图:

image

  • 批量导入时,属性类型为虚拟属性时,SQL表达式必填字段,否则会导入失败

  • 属性值类型必须与SQL表达式返回值类型一致,否则会校验失败

2.3:虚拟属性管理

  • 虚拟属性支持编辑以及删除

  • 虚拟属性支持属性值管理

  • 参与分析按钮可以控制虚拟属性是否在分析界面参与分析

image

3.使用场景示例

  • 以下示例3.1、3.3、3.4、3.5使用的view_dwd_aplus_log_event_ri表中的event_kv_json字段,该字段以KV键值对形式存储系统的各个属性key以及对应的value,$sys_为系统属性,$channel_utm_为渠道属性,$global_为全局属性,其余则为事件属性;

  • 示例3.2使用的是view_dwd_aplus_log_event_ri表中的sys_url字段,存储的是web页面路径,由协议+域名+路径所组成的url

3.1属性计算

示例1:假设当前埋点事件已有属性:<销售数量 sales_volume>和 <销售单价Unit_selling_price>,均为数值类型,计算商品收入可以使用如下表达式,使用销售数量*销售单价

toInt32OrZero(JSONExtractString(event_kv_json,'$sales_volume'))*toInt32OrZero(JSONExtractString(event_kv_json, '$Unit_selling_price'))

3.2属性值抽取

示例2:现有系统sys_url属性存放url页面路径(协议+域名+路径),例如https://yuming.com/path1/path2/

希望提取出/path1/path2/页面路径,可以使用如下表达式

extract(sys_url, '/[^/]+(/.*)')

3.3属性值合并

示例3:假设当前埋点事件已有属性:<国家Country>、<城市City>、街道<Street>,需要将这些字符串拼接为”国家-城市-街道“,可以使用如下表达式

CONCAT(JSONExtractString(event_kv_json,'$Country'),'-',JSONExtractString(event_kv_json, '$City'),'-',JSONExtractString(event_kv_json,'$Street'))

3.4时间日期再加工

示例4:假设当前埋点事件已有属性<时间date>中存储的数据为2023-04-01,需要转化为20230401,使用如下表达式

replaceOne(JSONExtractString(event_kv_json,'date'),'-','')

3.5数据类型转换

示例5:假设当前埋点事件已有属性<毫秒millisecond>,需要将毫秒转化为分钟的同时类型为int,使用如下表达式

CAST(JSONExtractInt(event_kv_json, 'millisecond') / 1000 / 60 AS Nullable(Int))