cube 是cube.js data schema 的核心,里面定义了生成sql 的说明

一个比较全的schema 例子

cube(`Users`, {
sql: `select * from users`, joins: {
Organizations: {
relationship: `belongsTo`,
sql: `${Users}.organization_id = ${Organizations}.id`
}
}, measures: {
count: {
type: `count`,
sql: `id`
}
}, dimensions: {
createdAt: {
type: `time`,
sql: `created_at`
}, country: {
type: `string`,
sql: `country`
}
}
});

参数说明

  • sql
    sql 主要是为了定义cube 为了查询的table,一般使用的方式是select * from <tablename> 注意我们一般是不需要groupby 等聚合操作的
cube(`Orders`, {
sql: `SELECT * FROM orders`
});

引用其他cube

cube(`Companies`, {
sql: `SELECT users.company_name, users.company_id FROM ${Users.sql()} AS users`
});
  • title
    我们可以使用title 来方便提供便于人们阅读的信息
    如下:
cube(`Orders`, {
sql: `SELECT * FROM orders`, title: `Product Orders`,
});
  • description
    提供对于数据的描述,让使用者更好的理解数据
cube(`Orders`, {
sql: `SELECT * FROM orders`, title: `Product Orders`,
description: `All orders related information`,
});
  • extends
    可以方便实现cube 的复用,类似面向对象的继承
cube(`OrderFacts`, {
sql: `SELECT * FROM orders` measures: {
count: {
type: `count`,
sql: `id`
}
}
}); cube(`ExtendedOrderFacts`, {
extends: OrderFacts, measure: {
doubleCount: {
type: `number`,
sql: `${count} * 2`
}
}
});
  • refreshKey
    cube.js 会帮助我们进行数据的cache,通过refreshKey 我们可以控制数据cache 的策略。默认策略如下
    根据dimensions 的max 值,根据当前cube 的count,如下基于时间戳的
cube(`OrderFacts`, {
sql: `SELECT * FROM orders` refreshKey: {
sql: `SELECT MAX(created_at) FROM orders`
}
});

我们可以通过refreshKey 强制制定cache 策略

cube(`OrderFacts`, {
sql: `SELECT * FROM orders` refreshKey: {
sql: `SELECT date_trunc('hour', NOW())`
}
});

上下文变量

  • filter 参数
    一般的格式FILTER_PARAMS.<CUBE_NAME>.<FILTER_NAME>.filter(expression) 实际上如果使用过了cube,这个主要是为了参数
    传递的
    一个参考cube schema
cube(`OrderFacts`, {
sql: `SELECT * FROM orders WHERE ${FILTER_PARAMS.OrderFacts.date.filter('date')}`, dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});

对于 OrderFacts.date 在['2018-01-01', '2018-12-31'] 范围的dimensions 生成sql 如下:

SELECT * FROM orders WHERE date >= '2018-01-01 00:00:00' and date <= '2018-12-31 23:59:59'

同时我们也可以传递函数,如下

cube(`Events`, {
sql: `
SELECT * FROM schema.\`events*\`
WHERE ${FILTER_PARAMS.Events.date.filter((from, to) =>
`_TABLE_SUFFIX >= FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(${from})) AND _TABLE_SUFFIX <= FORMAT_TIMESTAMP('%Y%m%d', TIMESTAMP(${to}))`
)}
`, dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});
  • user 上下文
    这个主要是给cube client 提供的,可以做为一个基于row 级别的安全处理,方便我们进行一些安全上的控制,如下
cube(`Oreders`, {
sql: `SELECT * FROM orders WHERE ${USER_CONTEXT.email.filter('email')}`, dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});

参考资料

https://cube.dev/docs/cube

 
 
 
 

cube.js 学习(四)cube.js cube 说明的更多相关文章

  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. cube.js 学习(十)cube 来自官方的学习网站

    尽管cube.js 包含了一个doc 站点,但是资料不是很全,同时如果查看了cube github 代码中的一些demo的话,发现还是很不错的 但是一些实践没有在文档展现出来,还好我们可以从cube ...

  4. cube.js 学习(十一)cube + gitbase 分析git 代码

    这个是一个简单的demo,使用gitbase+cube 分析git 仓库代码 需求 我们平时使用的gitlab,或者gogs 等git 仓库管理工具,有自己的管理强项,但是对于分析上可能就不是那么强大 ...

  5. cube.js 学习(七)cube.js type 以及format 说明

      cube.js 对于measure以及dimension 提供了丰富的数据类型,基本满足我们常见应用的开发,同时对于不同类型也提供了 格式化的操作 measure类型 number 格式 purc ...

  6. cube.js 学习(五)cube.js joins 说明

      cube.js 也支持join, 参考格式 joins: { TargetCubeName: { relationship: `belongsTo` || `hasMany` || `hasOne ...

  7. cube.js 学习(三)cube.js data schema

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

  8. cube.js 学习(二)cube.js与 graphql2chartjs的比较

    cube.js 是目前看到从设计以及理念上很不错的数据分析事件,graphql2chartjs 是hasura graphql-engine 团队开发 的一个类库基于graphql,以下做一些比较 c ...

  9. cube.js 学习(九)cube 的pre-aggregation

    我们可以使用cube的pre-aggregation 加速数据的查询,以下为一张来自官方的pre-aggregation 架构 参考架构图 pre-aggregation schema preAggr ...

  10. cube.js 学习(六)cube.js segments 说明

    segments 是你需要查询的数据的子集,实际上filter 也可以做类似的事情,但是,目前这个设计估计是为了更好的数据 查询吧,同时在操作界面上我们也可以看出来 参考格式 segments: { ...

随机推荐

  1. 『Go基础』第1节 Go语言简介

    1. Go语言简介 Go语言起源于2007年, 并于2009年开源. Go语言是一门全新的静态类型开发语言, 具有自动垃圾回收, 丰富的内置类型, 错误处理, 并发编程等特征.

  2. promethus监控mysql

    一.mysqld_exporter安装 下载页面 https://github.com/prometheus/mysqld_exporter/releases 下载最新版本 https://githu ...

  3. OpenWrt 中查看 Flash RAM CPU 信息

    OpenWrt 中查看 Flash RAM CPU 信息 来源  https://blog.csdn.net/mcusun2000/article/details/51130434 硬件: QCA95 ...

  4. 使用springboot实现一个简单的restful crud——02、dao层单元测试,测试从数据库取数据

    接着上一篇,上一篇我们创建了项目.创建了实体类,以及创建了数据库数据.这一篇就写一下Dao层,以及对Dao层进行单元测试,看下能否成功操作数据库数据. Dao EmpDao package com.j ...

  5. flutter isolate demo

    main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...

  6. lnmp环境快速搭建及原理解析

    刚开始学习php的时候是在wamp环境下开发的,后来才接触到 lnmp 环境当时安装lnmp是按照一大长篇文档一步步的编译安装,当时是真不知道是在做什么啊!脑袋一片空白~~,只知道按照那么长的一篇文档 ...

  7. 1+x学习日志——js获取随机颜色的几种实现方式

    因为学习时间比较紧,所以也没多少时间发博客了.后续会慢慢补齐的,下面是代码 /// function randomColor(){ var r = parseInt(Math.random() * 2 ...

  8. 开发QQ互联ios版Ane扩张 辛酸史

    来源:http://www.myexception.cn/operating-system/1451490.html 开发QQ互联ios版Ane扩展 辛酸史 开发QQ互联ios版Ane扩展辛酸史: 1 ...

  9. 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】

    一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...

  10. Linux正则表达式,grep总结,sed用法

    原文: 1.sed   流编辑器,实现对文字的增删改替换查(过滤.取行),能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件 输入到屏幕,可以把只匹配到模式的内容输入到屏幕上.还可以对原文件 ...