zoukankan      html  css  js  c++  java
  • cube.js 学习(三)cube.js data schema

    cube.js的 data schema 类似graphql 的type 定义,但是cube.js 的data schema 更偏向于dsl, 
    其中抽象了进行数据分析应用开发中的东西,自己提炼了measures , dimensions,cube

    说明

    • cube 这个是用来进行实体,或者说是数据库表管理的
    • measures 说简单点就是聚合类的操作,但是这个是由cube.js 自动帮我们生成代码的,我们只需要定义
    • dimensions 实际上就是我们关注的详细数据列信息(一般体现为数据库表的定义信息)

    一个简单例子

    • 定义schema
    cube(`Users`, {
      sql: `SELECT * FROM users`,
    
      measures: {
        count: {
          sql: `id`,
          type: `count`
        },
      },
    
      dimensions: {
        city: {
          sql: `city`,
          type: `string`
        },
    
        companyName: {
          sql: `company_name`,
          type: `string`
        }
      }
    });
    • 说明 
      生成sql 说明: 如果我们只需要一个cout 的measures ,生成的sql 如下:
    SELECT count(id) from users;

    如果我们需要应用city dimensions 到measures 生成的sql 如下:

    SELECT city, count(id) from users GROUP BY 1;

    measures 添加filter

    • 参考cube 定义
    cube(`Users`, {
      measures: {
        count: {
          sql: `id`,
          type: `count`
        },
    
        payingCount: {
          sql: `id`,
          type: `count`,
          filters: [
            { sql: `${CUBE}.paying = 'true'` }
          ]
        }
      }
    });

    以上schema 中引用了CUBE 常量,后边会有介绍

    • 说明 
      如果我们关注 payingCount measures 生成的sql 如下:
    SELECT
      count(
        CASE WHEN (users.paying = 'true') THEN users.id END
      ) "users.paying_count"
    FROM users

    添加计算measures

    • 参考schema定义
    cube(`Users`, {
      measures: {
        count: {
          sql: `id`,
          type: `count`
        },
    
        payingCount: {
          sql: `id`,
          type: `count`,
          filters: [
            { sql: `${TABLE}.paying = 'true'` }
          ]
        },
    
        payingPercentage: {
          sql: `100.0 * ${payingCount} / ${count}`,
          type: `number`,
          format: `percent`
        }
      }
    });
    • 说明 
      如果我们请求 payingPercentage measures 生成的sql 如下
    SELECT
      100.0 * count(
        CASE WHEN (users.paying = 'true') THEN users.id END
      ) / count(users.id) "users.paying_percentage"
    FROM users

    说明

    从以上看出cube.js 的schema 目前还算够用,一些基本的已经有了,而且从设计上,是可以复用的,类似的有dbt一个不错的额 
    etl t 工具

    参考资料

    https://cube.dev/docs/getting-started-cubejs-schema

  • 相关阅读:
    Loadrunner 参数化&参数化策略&参数化mysql
    Loadrunner 录制脚本注意事项
    Centos7卸载nginx及php、php-fpm方法
    卸载apache
    apache配置
    centOs
    ajax-php跨域请求
    安装php
    apache
    java集合类,HashMap,ArrayList
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10804296.html
Copyright © 2011-2022 走看看