• cube.js 通过prepareCompiler获取 meta


    meta 在cube.js 还是比较重要的(尽管当前没有太多的使用介绍),但是我们基于meta 可以进行
    代码生成,进行数据分析处理(基于元数据,方便开发数据分析应用),playground 就是集成了次
    进行界面开发

    参考代码

    • app.js
     
    const {prepareCompiler} = require("@cubejs-backend/schema-compiler")
    module.exports = {
        preCompiler:function(content,options){
           return prepareCompiler({
                localPath: () => __dirname,
                dataSchemaFiles: () => Promise.resolve([
                  { fileName: 'main.js', content }
                ])
              }, { adapter: 'postgres', ...options });     
        }
    }
    • index.js
    const app = require("./app")
    const fs = require("fs")
    const {PostgresQuery,ParamAllocator,compile} = require("@cubejs-backend/schema-compiler")
    let {compiler,joinGraph,cubeEvaluator,metaTransformer} = app.preCompiler(fs.readFileSync("./app-schema.js").toString("utf-8"));
    (async function(){
        await compiler.compile();
        console.log(JSON.stringify(metaTransformer.cubes))  // 此处获取meta
    })()
    • app-schema.js
    cube(`CallCenter`, {
        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`
          },
     
          ccClass: {
            sql: `cc_class`,
            type: `string`
          },
     
          ccHours: {
            sql: `cc_hours`,
            type: `string`
          },
     
          ccManager: {
            sql: `cc_manager`,
            type: `string`
          },
     
          ccMktClass: {
            sql: `cc_mkt_class`,
            type: `string`
          },
     
          ccMktDesc: {
            sql: `cc_mkt_desc`,
            type: `string`
          },
     
          ccMarketManager: {
            sql: `cc_market_manager`,
            type: `string`
          },
     
          ccDivisionName: {
            sql: `cc_division_name`,
            type: `string`
          },
     
          ccCompanyName: {
            sql: `cc_company_name`,
            type: `string`
          },
     
          ccStreetNumber: {
            sql: `cc_street_number`,
            type: `string`
          },
     
          ccStreetName: {
            sql: `cc_street_name`,
            type: `string`
          },
     
          ccStreetType: {
            sql: `cc_street_type`,
            type: `string`
          },
     
          ccSuiteNumber: {
            sql: `cc_suite_number`,
            type: `string`
          },
     
          ccCity: {
            sql: `cc_city`,
            type: `string`
          },
     
          ccCounty: {
            sql: `cc_county`,
            type: `string`
          },
     
          ccState: {
            sql: `cc_state`,
            type: `string`
          },
     
          ccZip: {
            sql: `cc_zip`,
            type: `string`
          },
     
          ccCountry: {
            sql: `cc_country`,
            type: `string`
          },
     
          ccRecStartDate: {
            sql: `cc_rec_start_date`,
            type: `time`
          },
     
          ccRecEndDate: {
            sql: `cc_rec_end_date`,
            type: `time`
          }
        },
     
        dataSource: `default`
      });
    • 效果

    说明

    官方关于meta 的获取基本原理与此类似

    参考资料

    https://www.cnblogs.com/rongfengliang/p/14641897.html
    https://github.com/rongfengliang/cubejs-prepareCompiler-learning

  • 相关阅读:
    弹出的iframe 表单无法获取焦点
    记录IE的两则BUG
    manifest 在移动端的应用实验
    [hover 状态图片变小] 淘宝的一个小用户体验
    使用 JSONP 的几点注意
    Apple在线商店iphone5, ipad mini到货提醒 邮件
    关于弹窗中的事件多次执行
    zen coding 插件使用实践
    hadoop系列整理Spark
    hadoop系列整理HBase
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14660357.html
Copyright © 2020-2023  润新知