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. Qt5 源代码自动跳转

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/nixiaoxianggong/articl ...

  2. HTML5单页框架View.js介绍

    什么是单页应用单页应用,是指将用户视觉上的多个页面在技术上使用一个载体来实现的应用. 换句话来讲,用户视觉效果,与技术实现的载体,并不是一定要一一对应的.采取哪种技术方案,取决于产品设计.技术组成以及 ...

  3. Spark 系列(二)—— Spark开发环境搭建

    一.安装Spark 1.1 下载并解压 官方下载地址:http://spark.apache.org/downloads.html ,选择 Spark 版本和对应的 Hadoop 版本后再下载: 解压 ...

  4. 不是所有OutOfMemoryError异常都跟内存有关

    一个老鸟遇到一个稀奇的问题后,如果只是想想,那么可能会失去一次丰富自己的机会. 如果从开始养成一个习惯,把所有难解决的问题都记录下来,面试的时候,也可能是给自己一次机会 *************** ...

  5. WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null

    原文:WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null 在 WPF 程序中,可能会存在 Application.Curren ...

  6. select ng-change 方法中 拿不到 ng-modal 定义的变量值

    在使用angularjs框架的项目中,select 的数据源有两种绑定方式,在option中使用ng-repeat循环绑定,或者在select中使用ng-option 绑定. 无论哪种绑定方式,均要使 ...

  7. oracel 查询语句

    1.以左边为显示表,从其他表查询关联的数据(多表查询) select a.*,b.name from da as a left join db as b on a.id = b.pid left jo ...

  8. 深入理解JVM(四) -- 垃圾内存回收的判定方法和内容

    上一篇文章我们学到了对象在内存中是如何存储的已经是如何被访问的,这篇文章将介绍当内存空间不够时,虚拟机将怎样判定对象可不可以被回收已经哪些地方会发生回收. 垃圾回收主要(不是全部)发生在堆内存中,当一 ...

  9. 第三章:JavaScript选择元素

    我们使用jQuery时,很常用的套路是“两步”第一步:选取元素第二步:对选中的元素执行需要的操作这一章我们重点研究第一步,如何使用jQuery选取元素以及对选取的结果进行“各种筛选”以满足我们的需求. ...

  10. 如何在backoffice里创建Hybris image container以及分配给product

    登录backoffice,在media container视图点击新建按钮: Catalog选择Product Catalog: 在Properties界面,可以选择media实例放入该contain ...