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. Linux jdk8 安装

    wegt 命令安装 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.o ...

  2. 2. RDD编程

    2.1 编程模型 在Spark中,RDD被表示为对象,通过对象上的方法调用来对RDD进行转换.经过一系列的transformations定义RDD之后,就可以调用actions触发RDD的计算,act ...

  3. UOJ343 清华集训2017 避难所 构造、打表

    传送门 玄学题 考虑构造三个数\(p_1p_2,p_1p_2,p_1p_2\)满足贪心分解会分解为\(p_1^3,p_2,p_2,p_2\),那么需要满足条件 1.\(p_1 , p_2 \in Pr ...

  4. SpringBoot中resources配置文件application.properties

    #项目名server.servlet.context-path=/springboot-day1#端口号server.port=8989 #datasource数据库连接信息#urlspring.da ...

  5. python之json库的使用

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.json库的使用 使用 JSON 函数需要导入 json 库:import jso ...

  6. springboot超级详细的日志配置(基于logback)

    前言   java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用) ...

  7. Linux(常用)命令

    目录 Linux(常用)命令 系统信息 关机 (系统的关机.重启以及登出 ) 文件和目录 文件搜索 挂载一个文件系统 磁盘空间 用户和群组 文件的权限 - 使用 "+" 设置权限, ...

  8. 使用ngspice进行电路仿真

    电路spice仿真工具已经比较成熟,开源的免费工具也有不错的性能.使用ngspice可以得到不错的仿真结果. 在Linux系统上,例如写一个RLC谐振的电路: RLCV1 1 0 AC 1V L 1 ...

  9. [https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog

    姊妹篇: [ipsec][strongswan] 使用wireshark查看strongswan ipsec esp ikev1 ikev2的加密内容 [https][tls] 如何使用wiresha ...

  10. 191011 python3-format函数

    # 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:# 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?方法一: l = 100.0 s = 100 for i in r ...