zoukankan      html  css  js  c++  java
  • cube.js schema 学习二

    cube.js 从那发布,到现在也已经有了很大的变动了,比如多租户,多数据源的支持,同时schema 也有了好多新的
    类型支持,以下是基于新版本的一个学习

    通用格式参考

     
    cube(`Users`, {
      sql: `select * from users`,
      joins: {
        Organizations: {
          relationship: `belongsTo`,
          sql: `${Users}.organization_id = ${Organizations}.id`
        }
      },
      measures: {
        count: {
          type: `count`,
          sql: `id`
        }
      },
      dimensions: {
        createdAt: {
          type: `time`,
          sql: `created_at`
        },
        country: {
          type: `string`,
          sql: `country`
        }
      }
    });
     
     

    命名

    cube.js 包含了一些规则,你只能使用数字0-9,_ 以及字母,当命名的时候必须一字母开头
    作为一个约定cube 命名的开头是大写字母,同时元素的命名以小写字母,与js 一样,驼峰
    命名法用与多词cube 以及成员命名

    参数

    • sql
      sql 主要用来生成cube 查询的表,它可以是任何正确的sql 查询,但是通常是select * from my_table
      必须注意in不需要定义group by 在cube 的sql 查询上,此查询应能改是一个普通的表,不包含聚合操作
      参考
     
    cube(`Orders`, {
      sql: `SELECT * FROM orders`
    });
     
     

    同时你也可以引用其他cube 的sql 查询,方便代码的复用

    cube(`Companies`, {
      sql: `SELECT users.company_name, users.company_id FROM ${Users.sql()} AS users`
    });
    • title
      主要是为了方便cube 的显示,默认cube.js 或做一些处理,方便人员查看,但是如果无法自动处理的
      时候,可以通过title 定义
     
    cube(`Orders`, {
      sql: `SELECT * FROM orders`,
      title: `Product Orders`,
    });
     
     
    • description
      主要是为了团队可以更好的理解cube 的意思
     
    cube(`Orders`, {
      sql: `SELECT * FROM orders`,
      title: `Product Orders`,
      description: `All orders related information`,
    });
     
    • extends
      类似代码的几类,实现整个cube 的复用
     
    cube(`OrderFacts`, {
      sql: `SELECT * FROM orders`
      measures: {
        count: {
          type: `count`,
          sql: `id`
        }
      }
    });
    cube(`ExtendedOrderFacts`, {
      extends: OrderFacts,
      measures: {
        doubleCount: {
          type: `number`,
          sql: `${count} * 2`
        }
      }
    });
    • refreshKey
      主要用来处理cube 的cache 策略
      默认包含一些规则
      如果未使用任何预聚合,请检查使用的预聚合以进行查询并使用预聚合refreshKey。
      如果名称不存在,请检查max时间维度的updated…
      检查max任何现有时间维度的,如果不存在…
      检查此多维数据集的行数。
      默认数据对于rdbms 为10s,大数据为2分钟
      同时我们可以自定自己的策略,比如使用表中的时间戳,但是请确保使用最大的
      同时我们也可以使用基于间隔的比如人 second,minute,hourr,day,week,实际上refreshKey
      只是sql 的语法糖,我们可以自定义自己的函数
    • dataSource
      dataSource 是cube 对于多数据源支持的一个最好说明,我们可以自定义自己的数据源,同时此参数
      会被传递给``dbtype以及driveFacotory 函数,作为上下文参数,默认为default
    • sqlAlias
      使用sqlAlias 可以避免过长的名称
     
    cube(`OrderFacts`, {
      sql: `SELECT * FROM orders`,
      sqlAlias: `ofacts`,
      // ...
    });

    上下文参数

    • Filter Params
      FILTER_PARAMS 允许你在生成sql 的时候使用filter 的值
      结构
     
    FILTER_PARAMS.<CUBE_NAME>.<FILTER_NAME>.filter(expression)
     

    filter 函数可以接受的表达式为字符串,或者函数,参考

    cube(`OrderFacts`, {
      sql: `SELECT * FROM orders WHERE ${FILTER_PARAMS.OrderFacts.date.filter('date')}`,
      measures: {
        count: {
          type: `count`
        }
      },
      dimensions: {
        date: {
          sql: `date`,
          type: `time`
        }
      }
    });
     
     

    对于以下的参数,会生成如下的sql


    {
      measures: ['OrderFacts.count'],
      timeDimensions: [{
        dimension: 'OrderFacts.date',
        granularity: 'day',
        dateRange: ['2018-01-01', '2018-12-31']
      }]
    }
     
     

    sql

    SELECT * FROM orders WHERE date >= '2018-01-01 00:00:00' and date <= '2018-12-31 23:59:59'

    User Context

    用户上下文,主要是cube.js 的安全模型,方便传递用户信息到cube.js 中
    参考

     
    cube(`Orders`, {
      sql: `SELECT * FROM orders WHERE ${USER_CONTEXT.email.filter('email')}`,
      dimensions: {
        date: {
          sql: `date`,
          type: `time`
        }
      }
    });
     

    过滤order表中email 为用户上下文的

    非安全值

    使用此方法,可能会有sql 注入的问题,必须慎重
    参考

     
    cube(`Orders`, {
      sql: `SELECT * FROM ${USER_CONTEXT.type.unsafeValue() === 'employee' ? 'employee' : 'public'}.orders`,
      dimensions: {
        date: {
          sql: `date`,
          type: `time`
        }
      }
    });

    sql 工具类

    • convertTz
      主要是方便时区的转换,将时间转换为用户请求的时区格式
      参考
     
    cube(`visitors`, {
      // ...
      dimensions: {
        createdAtConverted: {
          type: 'time',
          sql: SQL_UTILS.convertTz(`created_at`)
        },
      }
    })

    说明

    以上是对于新版本的一些说明,其他变动最好参数官方文档

    参考资料

    https://cube.dev/docs/cube#parameters-description

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12328984.html
Copyright © 2011-2022 走看看