取值与赋值

对象取值

DataQL 支持面向对象中的取值方式,例如下面几个例子:

  1. // 返回用户ID为4的用户名
  2. var userInfo = userByID({'id': 4});
  3. return userInfo.username;
  4.  
  5. // 或者简写为:
  6. return userByID({'id': 4}).username;
  7.  
  8. // 返回用户列表中第一条数据的用户名
  9. return userList()[0].username;

字典下标取值

DataQL 支持类似 JavaScript 中类似的下标方式取值。在 DataQL 中有结构的数据只有两种:集合Map

因此带有结构的对象类型数据其就相当于一个Map,可以通过下面的方式来获取属性值。

  1. // 返回用户ID为4的用户名
  2. var userInfo = userByID({'id': 4});
  3. return userInfo['username'];
  4.  
  5. // 或者简写为:
  6. return userByID({'id': 4})['username'];
  7.  
  8. // 返回用户列表中第一条数据的用户名
  9. return userList()[0]['username'];

数组下标取值

对于数字形式的下标分为:正向索引反向索引 两种。例如有一个数据集:

  1. 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 语句功效
throwhint INDEX_OVERFLOW = 'throw'当遇到索引溢出情况时严格的抛出ArrayIndexOutOfBoundsException 异常。
nullhint INDEX_OVERFLOW = 'null'当遇到索引溢出情况时返回 null。
near(默认)hint INDEX_OVERFLOW = 'near'正向索引溢出 list[100] 取最后一个。反向索引溢出 list[-100] 取第一个

对象赋值

非常抱歉 DataQL 是专注于数据聚合查询的工具,并不是一门脚本语言。因此一些开发语言中的特性在 DataQL 中并不存在。赋值语句就是其中之一。

在比如对于修改返回结果中某一条数据中的一个值,这个场景也不属于 DataQL 的领域范畴。

需要在业务维度将数据先准备好在交给 DataQL 做转换,或者您通过 lambda、Udf 等手段对数据进行批量处理。

DataQL 是专注于数据流的,这也是 DataQL 的设计原则之一,因此对数据的逻辑处理 DataQL 并不十分擅长。