資料表建立完成後,您可以使用指令碼模式通過FML語句配置表的欄位及分區資訊。本文為您介紹如何使用FML語句配置資料表的相關內容。
功能介紹
FML(Fast Modeling Language)是用於在維度建模領域快速構建資料表的一門類SQL語言,其文法採用了類SQL的標準文法。DataWorks資料建模的設計與實現解耦,在設計過程中,您無需考慮各個巨量資料引擎的實現方式,建模引擎會根據FML語言定義的Schema去驅動底層各個資料引擎的執行和操作,僅在實際物化(即把設計的邏輯錶轉換為底層引擎的物理表)階段,建模引擎會根據物化的選擇,將FML語言轉換為對應資料引擎可識別的SQL文法,並提交任務節點執行相關語句。
準備工作
DataWorks目前不支援通過FML語言建立資料表,需提前使用可視化介面建立邏輯表,建立方式如下:
使用限制
-
DataWorks目前不支援通過FML語言建立資料表或修改表名稱,您只能對已建立的資料表進行相關編輯操作。例如,編輯表欄位、配置關聯關係、配置表的分區等。
-
DataWorks目前僅支援通過FML語言將設計的資料表物化至MaxCompute、Hologres及Hive引擎。
-
FML語言將SQL中的關鍵字作為保留字,如果您的資料表或資料表的列使用了關鍵字命名,則需要使用
``符號進行轉義,否則建立表會產生報錯。
進入目標表的FML編輯頁面
-
在維度建模頁面,雙擊分類樹下對應的表名稱。
-
在表詳情頁單擊代碼模式。
在代碼模式頁簽的FML編輯地區,您可以查看當前表的建表FML語句。同時,您也可以配置或修改當前表的相關欄位,詳情請參見配置目標資料表。
-- 模型開始發布物理表(發布前審批、發布中、發布成功後)後,表名均無法進行修改。 CREATE DIM TABLE dim_ec_pub_staff_df ALIAS '地理行政地區維度資料表' ( id ALIAS '行政地區id' STRING COMMENT '行政地區id', name ALIAS '行政地區名稱' STRING COMMENT '行政地區名稱', `level` ALIAS '行政地區等級。1: 國家;2:州/省;3: 城市;4:區/縣;' INT COMMENT '行政地區等級。1: 國家;2:州/省;3: 城市;4:區/縣;', country_id ALIAS '國家id' STRING COMMENT '國家id', country_name ALIAS '國家名稱' STRING COMMENT '國家名稱', province_id ALIAS '州/省 id' STRING COMMENT '州/省 id', province_name ALIAS '州/省 名稱' STRING COMMENT '州/省 名稱', city_id ALIAS '城市id' STRING COMMENT '城市id', city_name ALIAS '城市名稱' STRING COMMENT '城市名稱', district_id ALIAS '區/縣 id' STRING COMMENT '區/縣 id', district_name ALIAS '區/縣 名稱' STRING COMMENT '區/縣 名稱', ds ALIAS '業務日期, yyyymmdd' STRING COMMENT '業務日期, yyyymmdd' ) COMMENT '地理行政地區維度資料表' WITH('life cycle'='1000');
配置目標資料表
為了方便查看,所有配置表的語句均體現在建立資料表語句(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 |
若目標引擎中已存在同名表,不指定 |
|
alias |
資料表或資料表中列的別名,通常用於定義資料表的中文名稱。該參數為選擇性參數。 |
|
tableType |
建立的表所屬的類型。目前僅支援使用FML語句建立如下類型的表:
|
|
comment |
表的備忘資訊。推薦備忘資訊的長度為1024字元。 |
|
columnDefinition |
資料表列的定義。可以包含如下參數:
說明
FML語句支援先設計後物化資料表,因此新建立的表可以不設定列資訊。 |
|
constraint |
定義表結構的約束情況,取值如下:
|
|
Partitioned BY |
用於建立表的分區。 |
|
WITH |
您在建立表時可以自訂的資訊,採用 |