代码模式建模

数据表创建完成后,您可以使用脚本模式通过FML语句配置表的字段及分区信息。本文为您介绍如何使用FML语句配置数据表的相关内容。

前提条件

DataWorks目前不支持通过FML语言创建数据表,您需要提前使用可视化界面创建好维度表、明细表、汇总表。

背景信息

FML(Fast Modeling Language)是用于在维度建模领域快速构建数据表的一门类SQL语言,其语法采用了类SQL的标准语法。DataWorks数据建模的设计与实现解耦,在设计过程中,您无需考虑各个大数据引擎的实现方式,建模引擎会根据FML语言定义的Schema去驱动底层各个数据引擎的执行和操作,仅在实际物化(即把设计的逻辑表转换为底层引擎的物理表)阶段,建模引擎会根据物化的选择,将FML语言转换为对应数据引擎可识别的SQL语法,并提交任务节点执行相关语句。

使用限制

  • DataWorks目前不支持通过FML语言创建数据表或修改表名称,您只能对已创建的数据表进行相关编辑操作。例如,编辑表字段、配置关联关系、配置表的分区等。

  • DataWorks目前仅支持通过FML语言将设计的数据表物化至MaxCompute、Hologres及Hive引擎。

  • FML语言将SQL中的关键字作为保留字,如果您的数据表或数据表的列使用了关键字命名,则需要使用``符号进行转义,否则创建表会产生报错。

进入目标表的FML编辑页面

  1. 维度建模页面,双击目录树下对应的表名称。

  2. 表详情页单击代码模式

    代码模式页签的FML编辑区域,您可以查看当前表的建表FML语句。同时,您也可以配置或修改当前表的相关字段,详情请参见配置目标数据表脚本模式

配置目标数据表

为了方便查看,所有配置表的语句均体现在创建数据表语句(CREATE TABLE)的格式中,实际上DataWorks的数据建模不支持使用FML语句创建表。您在实际使用时,仅参考定义表内容(例如,定义约束、分区等)的语句即可。配置目标表的FML语句格式如下。

--创建新表
      CREATE <table_type> TABLE
      IF NOT EXISTS
      --表名
      <table_name> [ALIAS <alias>]
      --定义列属性
      <col_name> [ALIAS <alias>] <datatype> [<category>] [COMMENT <comment>] [WITH (<key>=<value>,....)]
      --定义约束
      PRIMARY KEY (<col_name>),
      --维度约束
      CONSTRAINT <constraint_name> DIM KEY (<col_name>) REFERENCES <ref_table_name> (<ref_table_col_name>),
      --层级约束
      CONSTRAINT <constraint_name> LEVEL <col_name:(<col_name>)>, --分组约束
      CONSTRAINT <constraint_name> COLUMN_GROUP(<col_name>,...), 
      --定义备注
      COMMENT 'comment'
      --定义分区
      PARTITION BY (col DATATYPE COMMENT 'comment' WITH ('key'='value',...), ...)
      --定义属性
      WITH ('key'='value', 'key1'='value1', ...)
      ;
      
tableType
    : dimDetailType? DIM
    | factDetailType? FACT
    | CODE
    | DWS
    ;
    
 dimDetailType
    : NORMAL
    | LEVEL
    | ENUM
    ;
    
 factDetailType
    : TRANSACTION
    | AGGREGATE
    | PERIODIC_SNAPSHOT
    | ACCUMULATING_SNAPSHOT
    | CONSOLIDATED
   ;
    
 
comment 
    : COMMENT 'comment'
    ;
  

参数

描述

tableName

数据表的名称。推荐命名由英文字母、数字及下划线(_)组成,长度为128个字符。

if not exists

当您的目标引擎中已存在同名表,如果不指定if not exists时,则创建表会报错,而指定了if not exists后,无论引擎中是否存在同名表,则创建表均会成功。

说明

当您的引擎中已经存在同步表时,指定了if not exists后,创建的新表会替换原有的同名表。

alias

数据表或数据表中列的别名,通常用于定义数据表的中文名称。该参数为可选参数。

tableType

创建的表所属的类型。目前仅支持使用FML语句创建如下类型的表:

  • 维度表

    • 普通维度表(NORMAL):创建维度表时指定的默认类型。

    • 层级维度表(LEVEL):用于存放例如省、市、区等具有层级关系的数据。

    • 枚举维度表(ENUM):用于存放常用的可枚举的值。例如男、女性别等。

  • 事实表

    • 事实事务表(TRANSACTION):创建事实表时指定的默认类型。记录事务层面的事实,保存最为原子的数据。

    • 周期快照表(PERIODIC_SNAPSHOT):保存具有规律性、可预见时间的事实记录,它统计的是间隔周期内的度量统计,例如,历史至今、自然年至今等。其采用增量更新等方式更新表数据。

    • 累加表(ACCUMULATING_SNAPSHOT):存储事务数据的快照信息,用于积累不确定周期的数据,例如,订单记录快照事实表可包含付款日期,发货日期和收货日期时间点。

  • DWS表:用于合并特定指标的逻辑汇总表,表的定义语法与维度表和事实表类似。

  • 码表:又称为标准代码,是一种包含行业特定属性的代码表。例如,水电行业,可能会涉及创建是否有合同,供电合同类型等标准代码。

comment

表的备注信息。推荐备注信息的长度为1024字符。

columnDefinition

数据表列的定义。可以包含如下参数:

  • col_name:数据表的列名。由英文字母、数字、下划线(_)等字符组成。如果列名使用了FML中的关键字,则需要使用``符号进行转义。

  • alias:数据表中列的别名,通常用于定义数据表中列的中文名称。该参数为可选参数。

  • dataType:目前FML的数据类型包含了BIGINT、STRING、VARCHAR、CHAR、DECIMAL、DATETIME等。

  • category:用于对数据表的列进行分类。在维度建模中,列可以分为业务属性(ATTRIBUTE)、度量(MEASUREMENT)、关联字段(CORRELATION)类型。

说明

FML语句支持先设计后物化数据表,因此新创建的表可以不设置列信息。

constraint

定义表结构的约束情况,取值如下:

  • 主键约束(PrimaryConstraint):格式为PRIMARY KEY(col1, col2),其中col1, col2字段列表必须是已经定义过的列表。

  • 维度约束(DimConstraint):格式为DIM KEY(col1, col2) REFERENCES table_name(ref1, ref2)

  • 层级约束(LevelConstraint):仅在层级维度中生效。用于定义层级维度中的各个层级。

Partitioned BY

用于创建表的分区。

WITH

您在创建表时可以自定义的信息,采用key=value的方式,keyvalue的值需要使用单引号引起来,防止自定义的信息与FML的关键字冲突。WITH中的扩展属性,可以由物化FML语句的引擎来进行解析处理。