修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

v4.0
搜索
中文EN
v4.0

    数据流

    数据流

    数据流是指 UQL 运行时产生的一行一行的数据。在一段 UQL 语句中,链式语句(针对点、边、路径的插入、修改、查询)和子句都可以接收、输出数据流。

    数据流中可以同时有多个数据列存在,各列的长度即为各列数据的行数。数据列通常需要定义别名才能被后面的语句使用,一个数据列的结构类型等同于其别名的结构类型(NODE、EDGE、PATH、ATTR、ARRAY、TABLE),可参考《查询》章节中关于别名的介绍。

    同源列

    从一个语句(链式语句或子句)输出的一个或多个数据列,以及作为该语句的输入的一个或多个数据列(如有),这些列都是同源列。在 UQL 执行期间(RETURN 子句中进行去重操作时除外),同源列的长度是相等的,各列处于同一行中的数据有对应关系。

    示例:下图中的模板查询语句查到了 5 条路径,路径的终点和长度(边数)这两个数据列和路径为同源列,也都含有 5 条数据:

    如果对同源列中的某一列进行了去重(列长度变小)操作,此时可能会对其它同源列的长度产生影响,详情见后面 WITH 及 RETURN 的介绍。

    非同源列

    从无关联的两个或更多语句输出的数据列是非同源列。非同源列的长度通常不相同,行内的数据也没有对应关系。

    示例:下图中的两个 K 邻查询语句产生的两个数据列为非同源列,长度分别为 3 和 5:

    数据流与链式语句

    数据流作为链式语句的输入时,该语句执行的次数就是该数据流的长度,每次执行使用流中的一行数据(系统会根据实际情况进行优化)。

    示例:下图中的模板查询语句查到了若干条路径,这些路径的终点去重后共有 4 个节点,可以认为其后的删除语句共执行 4 次,每次删除一个节点:

    由于使用数据流作为输入而执行了多次的查询语句,产生的数据列的长度等于其每次查询到的结果的总数。

    示例:下图中的模板查询语句查到了蓝、红两个节点,可以认为其后的点查询语句执行第一次时查到两个蓝色节点,执行第二次时查到三个红色节点,共 5 条数据:

    示例:下图中的两个模板查询语句产生了两个非同源列,长度分别为 3 和 2。按照最短长度 2 对较长的数据流进行裁剪,最终共有两行数据传入了第三个查询语句中,并得到了 3 条查询结果:

    非同源列进入链式语句时,会按照最短列的长度对各列进行裁剪,即语句的执行次数等于最短列的长度。在 UQL 执行过程中对非同源列进行裁剪并没有太大的实际意义,更多情况下,非同源列需要被处理为同源列后再进入后面的语句,详情见后面 WITH 的介绍。

    数据流与子句

    不同的子句对数据流的处理能力不同。有些子句只能处理同源列,如 GROUP BY、ORDER BY、LIMIT、SKIP、UNCOLLECT,有些子句可以处理同源列,也可以处理非同源列,如 WITH、RETURN、WHERE;无论是否为同源列,经子句处理之后都是同源列。详情见后面各个子句的介绍。

    绝大数多数子句都需要明确指定待处理的数据列;个别子句(如 SKIP、LIMIT)则不需要明确指定,它们的处理对象是它们所紧随的子句的处理结果。

    请完成以下信息后可下载此书
    *
    公司名称不能为空
    *
    公司邮箱必须填写
    *
    你的名字必须填写
    *
    你的电话必须填写
    *
    你的电话必须填写