cube.js 动态编译问题
一般官方解决的动态编译使用asyncModule 但是asyncModule 有一些问题(对于join 处理有问题,这个是一个bug)
解决方法
- 使用repositoryFactory
不是很难,自己实现一个基于文件或者数据api的schemaFactory - 使用sqlAlias
好处是cube 的名称就可以不用使用cube 动态编译的name了,join 的时候直接使用就可以了,是一个比较简单的方法
const { transformDimensions, transformJoins, transformMeasures, convertStringPropToFunction } = require("./utils")
asyncModule(async () => {
const dynamicCubes = [
{
"name": "payments",
"sqlAlias": `payments`,
"sql": "SELECT * FROM public.\"payments\"",
"dataSource": "default",
"joins": {
"demoapp": {
"relationship": `belongsTo`,
"sql": "payments.__id = demoapp.__id"
}
},
"measures": {
"count": {
"sql": "COUNT(DISTINCT \"payments\".__id)",
"type": "number"
},
"total": {
"sql": "\"payments\".\"total\"",
"type": "sum"
}
},
"dimensions": {
"__id": {
"sql": "__id",
"type": "string",
"primaryKey": true
},
"name": {
"sql": "\"payments\".\"name\"",
"type": "string"
}
}
},
{
"name": "demoapp",
"sqlAlias": `demoapp`,
"sql": "SELECT * FROM public.\"demoapp\"",
"dataSource": "default",
"joins": {
"demoapp": {
"relationship": `belongsTo`,
"sql": "payments.__id = demoapp.__id"
}
},
"measures": {
"count": {
"sql": "COUNT(DISTINCT \"payments\".__id)",
"type": "number"
}
},
"dimensions": {
"__id": {
"sql": "__id",
"type": "string",
"primaryKey": true
},
"name": {
"sql": "\"payments\".\"name\"",
"type": "string"
}
}
}
]
dynamicCubes.forEach((dynamicCube) => {
const dimensions = transformDimensions(dynamicCube.dimensions);
const measures = transformMeasures(dynamicCube.measures);
const joins = transformJoins(dynamicCube.joins);
cube(dynamicCube.name, {
sql: dynamicCube.sql,
dimensions,
measures,
joins
});
});
}
)
- 使用require 引用schema js 文件模式
可以导出cube.js的schema 为一个cmd 的模块就可以了
module.exports = {
sql: ()=> `SELECT * FROM sf100000.call_center`,
joins: {
},
measures: {
count2: {
type: `count`
}
},
dimensions: {
ccCallCenterId: {
sql: ()=>`cc_call_center_id`,
type: `string`
},
ccName: {
sql: ()=>`cc_name`,
type: `string`
}
},
dataSource: `default`
};
参考资料
https://cube.dev/docs/cube#parameters-sql-alias
https://cube.dev/docs/schema/dynamic-schema-creation
https://github.com/cube-js/cube.js/issues/1880
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
2020-04-15 几个不错的开源formbuilder
2019-04-15 nginx ngx_http_image_filter_module 简单试用
2015-04-15 TaffyDB:开源JavaScript数据库
2014-04-15 html 滚动固定显示js脚本
2014-04-15 asp.net 导出excel的一种方法
2014-04-15 微软通过.NET Native为Windows Store应用提速
2014-04-15 .NET基金会成立