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/

  • 相关阅读:
    emulate sh
    postmaster.c 中的 ListenAddresses
    PostgreSQL的postmaster的fork动作验证
    NotifyMyFrontEnd 函数背后的数据缓冲区(三)
    对${ZSH_VERSION+set}的验证
    微软正准备一个简易的Rootkit清除方案 助用户打补丁 狼人:
    创新与安全:云计算的两只跷跷板 狼人:
    苹果禁止iPhone黑客访问App Store应用商店 狼人:
    春节不回家 单身留守族“拼饭”“拼玩” 狼人:
    僵尸侵入全球 袭击者或为东欧黑帮 狼人:
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14332375.html
Copyright © 2011-2022 走看看