zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    leetcode刷题四<寻找两个有序数组的中位数>
    leetcode刷题第三天<无重复字符的最长子串>
    leetcode刷题第二天<两数相加>
    leetcode刷题第一日<两数和问题>
    sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
    flask微电影系统开发中上下文处理器
    gdb解决字符串打印果断措施
    邻接表
    Jarvis OJ 一些简单的re刷题记录和脚本
    windows控件理论学习
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14664568.html
Copyright © 2011-2022 走看看