取值与赋值
对象取值
DataQL 支持面向对象中的取值方式,例如下面几个例子:
- // 返回用户ID为4的用户名
- var userInfo = userByID({'id': 4});
- return userInfo.username;
- // 或者简写为:
- return userByID({'id': 4}).username;
- // 返回用户列表中第一条数据的用户名
- return userList()[0].username;
字典下标取值
DataQL 支持类似 JavaScript 中类似的下标方式取值。在 DataQL 中有结构的数据只有两种:集合 和 Map。
因此带有结构的对象类型数据其就相当于一个Map,可以通过下面的方式来获取属性值。
- // 返回用户ID为4的用户名
- var userInfo = userByID({'id': 4});
- return userInfo['username'];
- // 或者简写为:
- return userByID({'id': 4})['username'];
- // 返回用户列表中第一条数据的用户名
- return userList()[0]['username'];
数组下标取值
对于数字形式的下标分为:正向索引、反向索引 两种。例如有一个数据集:
- var list = [0,1,2,3,4,5,6,7,8,9]
正向索引
正数,从前向后数,从0开始。
list[3] = 4
list[5] = 5
反向索引
负数,从后向前数,从1开始。
list[-3] = 7
list[-5] = 5
索引溢出
无论正向还是反向,都会涉及到下标越界问题。下标越界就是索引溢出,索引溢出之后 DataQL 有三种可以选择的处理行为:
行为 | DataQL 语句 | 功效 |
throw | hint INDEX_OVERFLOW = 'throw' | 当遇到索引溢出情况时严格的抛出ArrayIndexOutOfBoundsException 异常。 |
null | hint INDEX_OVERFLOW = 'null' | 当遇到索引溢出情况时返回 null。 |
near(默认) | hint INDEX_OVERFLOW = 'near' | 正向索引溢出 list[100] 取最后一个。反向索引溢出 list[-100] 取第一个 |
对象赋值
非常抱歉 DataQL 是专注于数据聚合查询的工具,并不是一门脚本语言。因此一些开发语言中的特性在 DataQL 中并不存在。赋值语句就是其中之一。
在比如对于修改返回结果中某一条数据中的一个值,这个场景也不属于 DataQL 的领域范畴。
需要在业务维度将数据先准备好在交给 DataQL 做转换,或者您通过 lambda、Udf 等手段对数据进行批量处理。
DataQL 是专注于数据流的,这也是 DataQL 的设计原则之一,因此对数据的逻辑处理 DataQL 并不十分擅长。