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实践一:SQL基础

    mysql简介 mysql是有名的开放源代码关系型数据库.它最早是AB公司开源的,后来到Sun公司手中.之后Sun公司被Oracle公司收购,mysql就归Oracle所有.从此mysql走向商业化, ...

  2. DataGrip License server

    之前用 Resharper 使用 http://xidea.online 来激活 今天下载一个DataGrip 发现不能使用这个地址,不知道是被封杀了还是不能跟 Resharper 的共用 在网上找到 ...

  3. ②将SVN迁移到GitLab-多分支多标签迁移

    之前我们介绍了<①将SVN迁移到GitLab-单分支迁移>,文中研究了svn迁移到git单分支的操作过程,本文针对实际开发过程中svn使用到的trunk.branches.tags情况进行 ...

  4. 使用jQuery开发tab选项卡插件(可以右键关闭多个标签)

    在前一篇“使用jQuery开发tab选项卡插件”的基础上添加了tab标签右键关闭菜单功能,菜单主要包括:关闭当前标签.关闭左侧标签.关闭右侧标签.关闭其他.关闭全部. 一.插件效果 二.实现思路 为w ...

  5. ASP.NET 一般处理程序 接收文件上传

    public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain&qu ...

  6. ssh远程登录连接慢的解决方法

    近期在搭建自动化集群服务,写脚本ssh批量分发公钥至其它服务器时比较缓慢,便在度娘上寻找解决方法如下: 方法一: 以ssh -v 调试模式远程登录: [root@bqh-nfs- ceshi]# ss ...

  7. 【hbase】hbase-2.2.1配置独立的zookeeper的安装与测试

    下载hbase-2.2.1-bin.tar.gz并执行安装命令: [hadoop@hadoop01 ~]$ tar -zxvf hbase--bin.tar.gz 查看安装目录: [hadoop@ha ...

  8. navicat for mysql 链接时报错:1251-Client does not support authentication protocol requested by server

    客户端使用navicat for mysql.本地安装了mysql 8.0.但是在链接的时候提示: 主要原因是mysql服务器要求的认证插件版本与客户端不一致造成的. 打开mysql命令行输入如下命令 ...

  9. /proc路径

    1.什么是proc目录proc是Linux系统下一个很重要的目录.它跟/etc, /home等这些系统目录不同,它不是一个真正的文件系统,而是一个虚拟的文件系统.它不存在于磁盘,而是存在于系统内存中, ...

  10. c# IEnumerable集合