全部產品
Search
文件中心

DataWorks:代碼模式建模

更新時間:Jun 19, 2024

資料表建立完成後,您可以使用指令碼模式通過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語句的引擎來進行解析處理。