zoukankan      html  css  js  c++  java
  • cube.js join 的处理

    支持join 模式

    • 参考格式
    joins: {
      TargetCubeName: {
        relationship: `belongsTo` || `hasMany` || `hasOne`,
        sql: `SQL ON clause`
      }
    }
    • 说明
      注意所有的join 使用的默认是left join ,对于INNER JOIN 语义的支持可以基于检查对应的列是否不为空,可以通过set filter 解决
      参考
     
    {
      member: "Posts.authorName",
      operator: "set"
    }

    参数说明

    注意定义join 的relationship必须明确,不然可能会产生不一样的结果

    • relationship
      hasOne
      一对一的关联
     
    cube("Users", {
      joins: {
        Profile: {
          relationship: `hasOne`,
          sql: `${Users}.id = ${Profile}.user_id`
        }
      }
    });

    hasMany
    定义一对多的场景,比如一个作者有多本书

     
    cube("Authors", {
      joins: {
        Books: {
          relationship: `hasMany`,
          sql: `${Authors}.id = ${Books}.author_id`
        }
      }
    });

    belongsTo
    定义多对一的场景,比如一个客户有多个订单,对于order 与客户的关联就是订单属于客户

     
    cube("Orders", {
      joins: {
        Customers: {
          relationship: `belongsTo`,
          sql: `${Orders}.customer_id = ${Customers}.id`
        }
      }
    });
    • sql
      定义关联的条件
     
    sql: `${Orders}.customer_id = ${Customers}.id`

    设置主键

    为了join 的正确处理,很多时候设置正确的主键也很必要,注意主键是在维度定义的

    dimensions: {
      authorId: {
        sql: `id`,
        type: `number`,
        primaryKey: true
      }
    }

    cube 的引用

    使用${CUBE} 可以引用当前的cube schema 定义,在处理join 的时候很有必要

    dimensions: {
      name: {
        sql: `${CUBE}.name`,
        type: `string`
      }
    }

    传递join

    cube.js 基于Dijkstra's algorithm 算法可以解决a-b,b-c 然后a-c 的关联问题
    比如:

     
    cube(`A`, {
      // ...
      joins: {
        B: {
          sql: `${A}.b_id = ${B}.id`,
          relationship: `belongsTo`
        }
      },
      measures: {
        count: {
          type: `count`
        }
      }
    });
    cube(`B`, {
      // ...
      joins: {
        C: {
          sql: `${B}.c_id = ${C}.id`,
          relationship: `belongsTo`
        }
      }
    });
    cube(`C`, {
      // ...
      dimensions: {
        category: {
          sql: `category`,
          type: `string`
        }
      }
    }); 

    我们可以使用

    {
      measures: ['A.count'],
      dimensions: ['C.category']
    }

    参考资料

    https://cube.dev/docs/joins
    https://cube.dev/docs/direction-of-joins/

  • 相关阅读:
    Jquery的事件与动画-----下雨的天气好凉爽
    JQuery选择器--------没有它就没有页面效果
    JavaScript对象--------------你又知道那些
    实体类----app-config
    知错就改,善莫大焉!!!
    二分查找模板
    《软件工程》学习资料积累
    《计算机算法设计与分析》的学习资源和好的课程积累
    软件的概念
    递归方程的求解和算法时间复杂度的分析
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14332375.html
Copyright © 2011-2022 走看看