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

posted on   荣锋亮  阅读(127)  评论(0编辑  收藏  举报

编辑推荐:
· 一个奇形怪状的面试题: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基金会成立

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示