zoukankan      html  css  js  c++  java
  • cube.js 学习(四)cube.js cube 说明

    cube 是cube.js data schema 的核心,里面定义了生成sql 的说明

    一个比较全的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`
        }
      }
    });

    参数说明

    • sql
      sql 主要是为了定义cube 为了查询的table,一般使用的方式是select * from <tablename> 注意我们一般是不需要groupby 等聚合操作的
    cube(`Orders`, {
      sql: `SELECT * FROM orders`
    });

    引用其他cube

    cube(`Companies`, {
      sql: `SELECT users.company_name, users.company_id FROM ${Users.sql()} AS users`
    });
    • title
      我们可以使用title 来方便提供便于人们阅读的信息
      如下:
    cube(`Orders`, {
      sql: `SELECT * FROM orders`,
    
      title: `Product Orders`,
    });
    • description
      提供对于数据的描述,让使用者更好的理解数据
    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,
    
      measure: {
        doubleCount: {
          type: `number`,
          sql: `${count} * 2`
        }
      }
    });
    • refreshKey
      cube.js 会帮助我们进行数据的cache,通过refreshKey 我们可以控制数据cache 的策略。默认策略如下
      根据dimensions 的max 值,根据当前cube 的count,如下基于时间戳的
    cube(`OrderFacts`, {
      sql: `SELECT * FROM orders`
    
      refreshKey: {
        sql: `SELECT MAX(created_at) FROM orders`
      }
    });

    我们可以通过refreshKey 强制制定cache 策略

    cube(`OrderFacts`, {
      sql: `SELECT * FROM orders`
    
      refreshKey: {
        sql: `SELECT date_trunc('hour', NOW())`
      }
    });

    上下文变量

    • filter 参数
      一般的格式FILTER_PARAMS.<CUBE_NAME>.<FILTER_NAME>.filter(expression) 实际上如果使用过了cube,这个主要是为了参数
      传递的
      一个参考cube schema
    cube(`OrderFacts`, {
      sql: `SELECT * FROM orders WHERE ${FILTER_PARAMS.OrderFacts.date.filter('date')}`,
    
      dimensions: {
        date: {
          sql: `date`,
          type: `time`
        }
      }
    });

    对于 OrderFacts.date 在['2018-01-01', '2018-12-31'] 范围的dimensions 生成sql 如下:

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

    同时我们也可以传递函数,如下

    cube(`Events`, {
      sql: `
      SELECT * FROM schema.\`events*\`
      WHERE ${FILTER_PARAMS.Events.date.filter((from, to) =>
        `_TABLE_SUFFIX >= FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(${from})) AND _TABLE_SUFFIX <= FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(${to}))`
      )}
      `,
    
      dimensions: {
        date: {
          sql: `date`,
          type: `time`
        }
      }
    });
    • user 上下文
      这个主要是给cube client 提供的,可以做为一个基于row 级别的安全处理,方便我们进行一些安全上的控制,如下
    cube(`Oreders`, {
      sql: `SELECT * FROM orders WHERE ${USER_CONTEXT.email.filter('email')}`,
    
      dimensions: {
        date: {
          sql: `date`,
          type: `time`
        }
      }
    });

    参考资料

    https://cube.dev/docs/cube

  • 相关阅读:
    电路原理图基本知识概述(转)
    数字电路笔记
    模拟电路笔记
    ROS笔记一
    STM32笔记三
    电子元件笔记
    STM32笔记二
    C语言相关知识
    利用sql报错帮助进行sql注入
    kali下纯文本与窗口环境切换
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10804360.html
Copyright © 2011-2022 走看看