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 `- ...
随机推荐
- vue生成带logo的二维码
输入命令行下载 npm install vue_qrcodes <template> <div> <qrcode :url="></qrcode&g ...
- MAC 添加Jmeter环境变量
vim ./bash_profile JMETER_HOME=/Users/finup/apache-jmeter-5.1.1 CLASSPATH=$JAVA_HOME/lib/tools.jar:$ ...
- (二)Django自定义标签
1.创建自定义标签 在项目的APP中新建一个Python Package-->blog_tags.py 代码: from django import template from ..models ...
- Docker学习笔记(一)—— 概述
1. Docker是个什么玩意 说Docker是什么之前,先来看一看Docker为什么会出现.我们知道,在学习过程中我们需要频繁地安装配置一些软件,不管是在Windows下还是在Linux,这些东西的 ...
- 前后端API交互如何保证数据安全性
前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提 ...
- C#连接数据库不安装Oracle客户端
Oracle提供了这样的Oracle.ManagedDataAccess.dll,让用可以需要安装Oracle客户端即可连接数据库,并且不区分32位和64位. 1.引用 选择引用,找到对应文件目录下的 ...
- Oracle 11g安装过程工作Oracle数据库安装图解
一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: oracle.com/tec ...
- gitlab用户登录与AD域用户集成
---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...
- 提高QPS
常用方案 1.异步化+MQ 即非阻塞,化繁为简,拿到你需要处理的资源后尽快回复.适用于事务处理场景,且无需对上游返回数据场景. 2.无锁设计 本质上是要降低锁冲突,基于数据版本的乐观锁 有效的减少了互 ...
- sqlite移植
编译 # tar xvf sqlite-3.6.16.tar.gz # cd sqlite-3.6.16 # ./configure # ./configure --host=arm-linux -- ...