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 常量,后边会有介绍
- 说明
如果我们关注 payingCountmeasures生成的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`
}
}
});
- 说明
如果我们请求 payingPercentagemeasures生成的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的更多相关文章
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Sea.js学习4——Sea.js的配置
可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...
- JS学习三(函数)
[函数的声明格式] 1.函数的声明格式: function 函数名(参数1,参数2,...){ 函数体代码 return 返回值: } 函数的调用: ① 直接调用:函数名(参数1的值,参数2的值,.. ...
- node.js学习三--------------------- http服务器模块的搭建
/** * http服务器的搭建,相当于php中的Apache或者java中的tomcat服务器 */ // 导包 const http=require("http"); //创建 ...
- js 学习三 Array
1.数组的长度 var sequence = [1, 1, 2, 3, 5, 8, 13]; sequence .length //7 2.字符串转换成数组 string.split() var my ...
- Node.js学习(Node.js基础)
1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...
- Sea.js学习3——Sea.js的CMD 模块定义规范
在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...
- Sea.js学习2——Sea.js的API 快速参考
(7 个接口是最常用的) 一.seajs.config:用来对 Sea.js 进行配置. seajs.config({ // 设置路径,方便跨目录调用 paths: { 'arale': 'https ...
- [node.js学习]为node.js写的一个操作mysql的类
不支持一个对象在不同异步中使用,模仿的php框架 speedphp中的model模块 GaryMysql.js var mysql = require('mysql'); var pool = nul ...
- Sea.js学习5——Sea.js的构建工具spm
如果项目遵循推荐的标准目录结构: foo-module/ |-- dist 存放构建好的文件 |-- src 存放 js.css 等源码 | |-- foo.js | `-- style.css `- ...
随机推荐
- Pycharm下直接升级库所遇到的'main'问题
Pycharm下直接升级库所遇到的pip模块中无'main'问题 Author : Benjamin142857 Date : 8/19/2018 对于Pycharm中直接升级库,只需在 \(Sett ...
- java 简易日历表
在页面上输出1900年以后任意一年的简易日历表 package text3; import java.util.Scanner; public class MyCalendar { public st ...
- idea: unable to import maven project
新搭建的maven环境,使用idea创建maven项目时,一直提示 unable to import maven project,百度良久未解决 有说关闭防火前的,亲测无效,后看到说是maven-3. ...
- rabbitmq使用教程
检查RabbitMQ运行状态1)打开命令行命令行,进入RabbitMQ的安装目录: cd D:\installs\rabbitmq\rabbitmq_server-3.7.15\sbin2)输入 ra ...
- iOS - 静态库的导入和头文件路径的设置
开发过程中,免不了要用到一些第三方或者是别人写好的一些Demo,这时就经常会用到别人写的一些静态库(.a文件)和n多个头文件(.h文件),这些文件不是简单地把它们拉到自己的工程里面就行的,还要设置一些 ...
- CSS标签选择器&类选择器
基本选择器包括标签选择器.类选择器和ID选择器三类,其他选择器都是在这三类选择器的基础上组合形成 ##标签选择器 示例: <style type="text/css"> ...
- title 有背景边框自适应 mobile
固定宽度,固定高度,来写背景的高度.这样就能居中.
- Multipath 多路径配置说明
查看主机或者存储交换机上的www号,在存储上将LUN映射给需要的主机 cat /sys/class/fc_host/host*/port_name 0x2002d0431efb7f5d 6d 该ww ...
- Go path/filepath文件路径操作
本文:https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter06/06.2.html path:htt ...
- 获取项目中所有URL--获取swagger上展示的接口信息
有时我们需要接口的一些基本信息,比如接口请求路径,接口请求方式等,我们用这些信息来做判断,或者入库. 我在开发接口权限的时候就遇到了这个问题,之前写的接口很多,现在需要将这些接口信息存到数据库中, 用 ...