标签:drive safe 元素 工具 ali for 数据源 eval 团队
cube.js 从那发布,到现在也已经有了很大的变动了,比如多租户,多数据源的支持,同时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`
}
}
});
cube.js 包含了一些规则,你只能使用数字0-9
,_
以及字母,当命名的时候必须一字母开头
作为一个约定cube 命名的开头是大写字母,同时元素的命名以小写字母,与js 一样,驼峰
命名法用与多词cube 以及成员命名
select * from my_table
cube(`Orders`, {
sql: `SELECT * FROM orders`
});
同时你也可以引用其他cube 的sql 查询,方便代码的复用
cube(`Companies`, {
sql: `SELECT users.company_name, users.company_id FROM ${Users.sql()} AS users`
});
cube(`Orders`, {
sql: `SELECT * FROM orders`,
?
title: `Product Orders`,
});
cube(`Orders`, {
sql: `SELECT * FROM orders`,
?
title: `Product Orders`,
description: `All orders related information`,
});
cube(`OrderFacts`, {
sql: `SELECT * FROM orders`
?
measures: {
count: {
type: `count`,
sql: `id`
}
}
});
?
cube(`ExtendedOrderFacts`, {
extends: OrderFacts,
?
measures: {
doubleCount: {
type: `number`,
sql: `${count} * 2`
}
}
});
second
,minute
,hourr
,day
,week
,实际上refreshKey driveFacotory
函数,作为上下文参数,默认为defaultcube(`OrderFacts`, {
sql: `SELECT * FROM orders`,
?
sqlAlias: `ofacts`,
?
// ...
});
FILTER_PARAMS.<CUBE_NAME>.<FILTER_NAME>.filter(expression)
filter 函数可以接受的表达式为字符串,或者函数,参考
cube(`OrderFacts`, {
sql: `SELECT * FROM orders WHERE ${FILTER_PARAMS.OrderFacts.date.filter(‘date‘)}`,
?
measures: {
count: {
type: `count`
}
},
?
dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});
对于以下的参数,会生成如下的sql
{
measures: [‘OrderFacts.count‘],
timeDimensions: [{
dimension: ‘OrderFacts.date‘,
granularity: ‘day‘,
dateRange: [‘2018-01-01‘, ‘2018-12-31‘]
}]
}
sql
SELECT * FROM orders WHERE date >= ‘2018-01-01 00:00:00‘ and date <= ‘2018-12-31 23:59:59‘
用户上下文,主要是cube.js 的安全模型,方便传递用户信息到cube.js 中
参考
cube(`Orders`, {
sql: `SELECT * FROM orders WHERE ${USER_CONTEXT.email.filter(‘email‘)}`,
?
dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});
过滤order表中email 为用户上下文的
使用此方法,可能会有sql 注入的问题,必须慎重
参考
cube(`Orders`, {
sql: `SELECT * FROM ${USER_CONTEXT.type.unsafeValue() === ‘employee‘ ? ‘employee‘ : ‘public‘}.orders`,
?
dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});
cube(`visitors`, {
// ...
?
dimensions: {
createdAtConverted: {
type: ‘time‘,
sql: SQL_UTILS.convertTz(`created_at`)
},
}
})
以上是对于新版本的一些说明,其他变动最好参数官方文档
https://cube.dev/docs/cube#parameters-description
标签:drive safe 元素 工具 ali for 数据源 eval 团队
原文地址:https://www.cnblogs.com/rongfengliang/p/12328984.html