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

cube.js 学习(三)cube.js data schema的更多相关文章

  1. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  2. Sea.js学习4——Sea.js的配置

    可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...

  3. JS学习三(函数)

    [函数的声明格式] 1.函数的声明格式: function 函数名(参数1,参数2,...){ 函数体代码 return 返回值: } 函数的调用: ① 直接调用:函数名(参数1的值,参数2的值,.. ...

  4. node.js学习三--------------------- http服务器模块的搭建

    /** * http服务器的搭建,相当于php中的Apache或者java中的tomcat服务器 */ // 导包 const http=require("http"); //创建 ...

  5. js 学习三 Array

    1.数组的长度 var sequence = [1, 1, 2, 3, 5, 8, 13]; sequence .length //7 2.字符串转换成数组 string.split() var my ...

  6. Node.js学习(Node.js基础)

    1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...

  7. Sea.js学习3——Sea.js的CMD 模块定义规范

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  8. Sea.js学习2——Sea.js的API 快速参考

    (7 个接口是最常用的) 一.seajs.config:用来对 Sea.js 进行配置. seajs.config({ // 设置路径,方便跨目录调用 paths: { 'arale': 'https ...

  9. [node.js学习]为node.js写的一个操作mysql的类

    不支持一个对象在不同异步中使用,模仿的php框架 speedphp中的model模块 GaryMysql.js var mysql = require('mysql'); var pool = nul ...

  10. Sea.js学习5——Sea.js的构建工具spm

    如果项目遵循推荐的标准目录结构: foo-module/ |-- dist 存放构建好的文件 |-- src 存放 js.css 等源码 | |-- foo.js | `-- style.css `- ...

随机推荐

  1. mysql_重置密码

    # 修改编码 ```pythonshow variables like '%char%'; #查看当前使用的编码 1.打开配置文件: vim /etc/mysql/my.cnf 2.在[client] ...

  2. idea: unable to import maven project

    新搭建的maven环境,使用idea创建maven项目时,一直提示 unable to import maven project,百度良久未解决 有说关闭防火前的,亲测无效,后看到说是maven-3. ...

  3. 关于 JS this

    关于 JS this 1. this 与 普通函数 2. this 与 bind.call.apply 3. this 与 箭头函数 4. this 与 return 4.1 返回 引用对象 4.2 ...

  4. JS中的函数与对象

    创建函数的三种方式 1.函数声明 function calSum1(num1, num2) { return num1 + num2; } console.log(calSum1(10, 10)); ...

  5. QTableWidget数据表格

    void setRowHeight(int row, int height); //行高 void setVerticalHeaderLabels(const QStringList &lab ...

  6. 2013.6.26 - OpenNER第六天

    今例会的时候看CRF,突然感觉到ANN模型可能没有问题了,问题出在评价函数,不能接过好就说好,或者说收敛方法有问题,并不是打得对就答得好.还有就是我们应该让他能够根据需要而自己产生问题,问我们,然后我 ...

  7. K3 Cloud的数据中心加载异常处理

    以前一直是财务维护的K3  Cloud突然说不能登录,用的SQL 2008的数据库,运维也搞不定,找帮忙,因为是部署在阿里云上,上去看看数据库,这个K3数据库占了600多G,想看看这个表结构,就是打不 ...

  8. 小程序缓存Storage的基本用法

    wx.setStorageSync('key', 'hello world') 然后在小程序调试器里面的Storage里面就能看到设置的值.在小程序里面,如果用户不主动清除缓存,这个缓存是一直在的. ...

  9. PS批量截取图片

    本文提供的是需要截取大量图片的方法,仅供参考. 打开ps,在菜单栏找到窗口,点击窗口里面的动作 窗口右上方 或者下方会出现一个小窗口 点击小窗口右下角删除图标旁边的图标新建动作,工作名称:截取图片 . ...

  10. 配置比较完善的日志 logger 的使用

    1.配置文件 log_conf.conf ################################################ ###########propagate 是否继承父类的lo ...