cube.js 学习(四)cube.js cube 说明
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`
}
}
});
参考资料
cube.js 学习(四)cube.js cube 说明的更多相关文章
- 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({ // 别名配置 ...
- cube.js 学习(十)cube 来自官方的学习网站
尽管cube.js 包含了一个doc 站点,但是资料不是很全,同时如果查看了cube github 代码中的一些demo的话,发现还是很不错的 但是一些实践没有在文档展现出来,还好我们可以从cube ...
- cube.js 学习(十一)cube + gitbase 分析git 代码
这个是一个简单的demo,使用gitbase+cube 分析git 仓库代码 需求 我们平时使用的gitlab,或者gogs 等git 仓库管理工具,有自己的管理强项,但是对于分析上可能就不是那么强大 ...
- cube.js 学习(七)cube.js type 以及format 说明
cube.js 对于measure以及dimension 提供了丰富的数据类型,基本满足我们常见应用的开发,同时对于不同类型也提供了 格式化的操作 measure类型 number 格式 purc ...
- cube.js 学习(五)cube.js joins 说明
cube.js 也支持join, 参考格式 joins: { TargetCubeName: { relationship: `belongsTo` || `hasMany` || `hasOne ...
- cube.js 学习(三)cube.js data schema
cube.js的 data schema 类似graphql 的type 定义,但是cube.js 的data schema 更偏向于dsl, 其中抽象了进行数据分析应用开发中的东西,自己提炼了mea ...
- cube.js 学习(二)cube.js与 graphql2chartjs的比较
cube.js 是目前看到从设计以及理念上很不错的数据分析事件,graphql2chartjs 是hasura graphql-engine 团队开发 的一个类库基于graphql,以下做一些比较 c ...
- cube.js 学习(九)cube 的pre-aggregation
我们可以使用cube的pre-aggregation 加速数据的查询,以下为一张来自官方的pre-aggregation 架构 参考架构图 pre-aggregation schema preAggr ...
- cube.js 学习(六)cube.js segments 说明
segments 是你需要查询的数据的子集,实际上filter 也可以做类似的事情,但是,目前这个设计估计是为了更好的数据 查询吧,同时在操作界面上我们也可以看出来 参考格式 segments: { ...
随机推荐
- 【IDEA使用技巧】(3) —— IntelliJ IDEA Maven配置
1.IntelliJ IDEA Maven配置 1.1. Maven介绍与下载 Maven是一个项目管理工具,使用它能对Java项目中的jar包进行管理与项目构建,很好地解决了传统项目使用导包的方式管 ...
- Linux -- touch 命令
在Linux中,每个文件都关联一个时间戳,并且每个文件搜会存储最近一次访问的时间.最近一次修改的时间和最近一次变更的时间等信息.所以,无论何时我们创建一个新文件,访问或者修改一个已经存在的文件,文件的 ...
- ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
原文:https://www.stevejgordon.co.uk/httpclientfactory-aspnetcore-outgoing-request-middleware-pipeline- ...
- JDBC第一个案例
1.概述 JDBC(Java DataBase Connectivity) 是 Java 提供的用于执行 SQL 语句一套 API,可以为多种关系型数据库提供统一访问,由一套用 Java 语言编写的类 ...
- python 爬虫 user-agent 生成
有些网站做了反爬技术,如:比较初级的通过判断请求头部中的user-agent字段来检测是否通过浏览器访问的. 在爬这类网站时需要模拟user-agent import random import re ...
- 聊聊 ES6 中的箭头函数
首先来两点: 当只有一个参数的时候,那么 () 可以省略 当只有一个 return 的时候,那么 {} 可以省略 当函数体内只有一条语句的时候,那么 {} 也可以省略 下面来几个简单的例子来对比 ES ...
- 智慧图携手DataPipeline,让实体商业更智慧!
近日,国内领先的实体商业数字化运营服务商智慧图携手DataPipeline,基于专业的数据集成与应用基础展开了合作. 未来DataPipeline将通过不断提升自身产品和服务实力,与智慧图一道致力于帮 ...
- Jmeter学习笔记(十二)——断言
一.断言简介 jmeter中有个元件叫做断言(Assertion).用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致. 使用断言的目的:在request的返回层面 ...
- [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
来源:http://bbs.9ria.com/thread-102037-1-1.html 最近看到本版块的很多关于NativeExtension的应用.但是都是在Android下面的应用.也有很多朋 ...
- Python学习日记(十九) 模块导入
模块导入 当文件夹中有这样一个自定义的command模块 在它的内部写下下列代码: print('这个py文件被调用!') def fuc(): print('这个函数被调用!') 然后我们在comm ...