MCPcopy Index your code
hub / github.com/alibaba/fast-modeling-language

github.com/alibaba/fast-modeling-language @v0.5.19

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.5.19 ↗ · + Follow
15,364 symbols 59,062 edges 1,634 files 2,205 documented · 14% updated 2mo agov0.5.19 · 2026-05-01★ 744 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

语言: 中文| English

Fast Modeling LanguageJava CI with Maven

FML(Fast Modeling Language)是一种类似SQL的语言,专为维度建模而设计。它旨在实现快速建模,遵循"Kimball维度建模技术理论"和"阿里巴巴OneData理论"。FML从SQL中继承了许多特性。例如,在创建模型时,FML研究并参考了标准的DDL语法,并在此基础上进行了扩展。在设计模型时,您不再需要关注不同种类大数据引擎的具体规则。FML转换器将把您的模型转换为SQL语法,可以直接被特定类型的引擎读取。

特性

  • 一种专门为维度建模设计的类SQL语言。
  • 支持在数据仓库建立过程中定义语法,如:数仓规划、字段标准、码表、数据指标。
  • 基于Java构建,您可以使用语法结构API轻松构建模型。
  • 使用Transform API将模型转换为常见引擎的各种语法,如:Hive、Hologres、Mysql。
  • 支持JDBC驱动模式,与模型引擎交互。

相关文档(持续更新中): https://alibaba.github.io/fast-modeling-language/

解析示例


import com.aliyun.fastmodel.core.parser.FastModelParser;
import com.aliyun.fastmodel.core.parser.FastModelParserFactory;

public class HelloFML {
    //单例
    private static final FastModelParser FAST_MODEL_PARSER = FastModelParserFactory.getInstance().get();

    public static void main(String[] args) {
        String fml
            = "create dim table t_1 alias 'alias_name' (col bigint alias 'alias_name' comment 'col_comment') comment 'comment';";
        CreateDimTable createDimTable = FAST_MODEL_PARSER.parseStatement(fml);
        //do your work
    }
}

Transformer示例

import com.aliyun.fastmodel.core.tree.BaseStatement;
import com.aliyun.fastmodel.transform.api.Transformer;
import com.aliyun.fastmodel.transform.api.TransformerFactory;
import com.aliyun.fastmodel.transform.api.context.TransformContext;
import com.aliyun.fastmodel.transform.api.dialect.DialectMeta;

public class HelloFMLTransformer {
    public static void main(String[] args) {
        DialectMeta dialectMeta =
            Transformer < BaseStatement > statementTransformer = TransformerFactory.getInstance().get(dialectMeta);
        statementTransformer.transform(statement, context).getNode();
    }
}

源码构建

环境要求:

  • 类Unix环境(我们使用Linux、Mac OS X、Cygwin、WSL)
  • Git
  • Maven3.5.0+
  • Java 8

下载和构建

git clone git@github.com:alibaba/fast-modeling-language.git
cd fast-modeling-language
mvn clean package -DskipTests # this will take up to 10 minutes

开发FML

FML的开发者可以使用IntelliJ IDEA来开发。我们提供IntelliJ IDEA给开发者,他们想提交FML代码库的开发者。 开发者的IDE需要支持至少:

  • Java项目开发
  • 支持Maven

IntelliJ IDEA IntelliJ IDEA插件

  • IntelliJ地址: https://www.jetbrains.com/idea/
  • IntelliJ ANTLR插件: https://plugins.jetbrains.com/plugin/7358-antlr-v4
  • Code style 模板: docs/Alibaba_CodeStyle.xml
  • ErrorProne: https://errorprone.info/docs/installation

文档

FML文档的介绍和指南可以在doc/目录下找到,文档是通过Docsify管理的,要了解更多信息请参阅:docsify快速入门 - 本地执行: docsify serve docs - 之后访问: http://localhost:3000

Extension points exported contracts — how you extend this code

Pipeline (Interface)
Desc: @author panguanjing @date 2022/10/9 [27 implementers]
fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/merge/Pipeline.java
Node (Interface)
抽象的节点 @author panguanjing @date 2020/10/29 [188 implementers]
fastmodel-core/src/main/java/com/aliyun/fastmodel/core/tree/Node.java
FmlCommand (Interface)
Desc: @author panguanjing @date 2020/12/9 [23 implementers]
fastmodel-driver/fastmodel-driver-server/src/main/java/com/aliyun/fastmodel/driver/server/command/FmlCommand.java
StatementConverter (Interface)
转化器,支持FML模型之间互相转换 @author panguanjing @date 2021/5/30 [29 implementers]
fastmodel-converter/fastmodel-converter-spi/src/main/java/com/aliyun/fastmodel/converter/spi/StatementConverter.java
PerformanceExec (Interface)
performance exec @author panguanjing @date 2021/4/1 [23 implementers]
fastmodel-benchmarks/src/main/java/com/aliyun/fastmodel/benchmarks/PerformanceExec.java
InputStreamSource (Interface)
获取输入流的源 @author panguanjing @date 2021/5/16 [6 implementers]
fastmodel-transform/fastmodel-transform-excel/src/main/java/com/aliyun/fastmodel/transform/excel/spi/InputStreamSource.java
FragmentParser (Interface)
parser @author panguanjing @date 2020/9/18 [12 implementers]
fastmodel-transform/fastmodel-transform-plantuml/src/main/java/com/aliyun/fastmodel/transform/plantuml/parser/FragmentParser.java
FmlTemplate (Interface)
引用的模版对象 @author panguanjing @date 2020/10/19 [28 implementers]
fastmodel-transform/fastmodel-transform-template/src/main/java/com/aliyun/fastmodel/transform/template/FmlTemplate.java

Core symbols most depended-on inside this repo

build
called by 1903
fastmodel-transform/fastmodel-transform-api/src/main/java/com/aliyun/fastmodel/transform/api/builder/StatementBuilder.java
append
called by 1412
fastmodel-ide/fastmodel-ide-open/src/main/resources/static/fastmodelWorker.js
of
called by 1090
fastmodel-core/src/main/java/com/aliyun/fastmodel/core/tree/QualifiedName.java
add
called by 958
fastmodel-ide/fastmodel-ide-open/src/main/resources/static/fastmodelWorker.js
match
called by 902
fastmodel-ide/fastmodel-ide-open/src/main/resources/static/fastmodelWorker.js
getValue
called by 768
fastmodel-transform/fastmodel-transform-api/src/main/java/com/aliyun/fastmodel/transform/api/format/PropertyKey.java
r
called by 709
fastmodel-ide/fastmodel-ide-open/src/main/resources/static/fastmodelWorker.js
tryGetToken
called by 677
fastmodel-ide/fastmodel-ide-open/src/main/resources/static/fastmodelWorker.js

Shape

Method 12,696
Class 2,334
Function 129
Enum 117
Interface 88

Languages

Java59%
TypeScript41%

Modules by API surface

fastmodel-ide/fastmodel-ide-open/src/main/resources/static/fastmodelWorker.js6,230 symbols
fastmodel-driver/fastmodel-driver-client/src/main/java/com/aliyun/fastmodel/driver/client/metadata/FastModelDataBaseMetadata.java176 symbols
fastmodel-core/src/main/java/com/aliyun/fastmodel/core/tree/AstVisitor.java162 symbols
fastmodel-core/src/main/java/com/aliyun/fastmodel/core/formatter/FastModelVisitor.java139 symbols
fastmodel-core/src/main/java/com/aliyun/fastmodel/core/tree/IAstVisitor.java114 symbols
fastmodel-driver/fastmodel-driver-client/src/main/java/com/aliyun/fastmodel/driver/client/FastModelResultSet.java107 symbols
fastmodel-parser/src/main/java/com/aliyun/fastmodel/parser/AstBuilder.java100 symbols
fastmodel-transform/fastmodel-transform-oceanbase/src/main/java/com/aliyun/fastmodel/transform/oceanbase/parser/OceanBaseMysqlAstBuilder.java89 symbols
fastmodel-transform/fastmodel-transform-adbpg/src/main/java/com/aliyun/fastmodel/transform/adbpg/parser/AdbPostgreSQLAstBuilder.java69 symbols
fastmodel-parser/src/test/java/com/aliyun/fastmodel/parser/impl/TableTest.java69 symbols
fastmodel-transform/fastmodel-transform-hologres/src/main/java/com/aliyun/fastmodel/transform/hologres/parser/HologresAstBuilder.java68 symbols
fastmodel-transform/fastmodel-transform-mysql/src/main/java/com/aliyun/fastmodel/transform/mysql/parser/MysqlAstBuilder.java64 symbols

Datastores touched

(mongodb)Database · 1 repos
(mysql)Database · 1 repos

For agents

$ claude mcp add fast-modeling-language \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact