任務編排之電商打標
Data Management任務編排主要用於編排各類任務並進行調度執行。您可以通過建立一個或多個任務節點群組成的任務流,實現複雜的任務調度,提高資料開發效率。
背景資訊
電商做大促活動時,常會推出優惠活動,例如使用者累計消費達到一定額度,發放對應額度的優惠券。本文使用任務編排中的單一實例SQL賦值節點、條件分支節點和單一實例SQL節點,在資料庫層面實現該需求。
前提條件
您需要準備一個資料庫,且擁有該資料庫的變更許可權。如需申請許可權,請參見存取控制許可權概述。
環境準備
單擊控制台左上方的
表徵圖,選擇。說明若您使用的是非極簡模式的控制台,在頂部功能表列中,選擇。
在請先選擇資料庫對話方塊中,搜尋並選擇資料庫,單擊確認。
-
建立配置表、業務表、消費券發放表。
-
建立表名為activity_setting的配置表。將下列建表SQL語句粘貼到SQL書寫區域,單擊執行。
建表SQL語句:
CREATE TABLE `activity_setting` ( `has_promotion` tinyint(1) NOT NULL COMMENT '是否有優惠活動', `consumption_limit` int(11) NOT NULL COMMENT '消費額限制', `quota` int(11) NOT NULL COMMENT '發放優惠券額度', PRIMARY KEY (`has_promotion`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=COMPACT AVG_ROW_LENGTH=16384; -
建立表名為consumption_records的業務表。將下列建表SQL語句粘貼到SQL書寫區域,單擊執行。
建表SQL語句:
CREATE TABLE `consumption_records` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '流水號', `time` datetime NOT NULL COMMENT '消費時間', `count` int(11) NOT NULL COMMENT '消費額', `user_id` bigint(20) NOT NULL COMMENT '使用者id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消費記錄表' AUTO_INCREMENT=8001 ROW_FORMAT=COMPACT AVG_ROW_LENGTH=54; -
建立表名為voucher_send_list的優惠券發放表。將下列建表SQL語句粘貼到SQL書寫區域,單擊執行。
建表SQL語句:
CREATE TABLE `voucher_send_list` ( `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `user_id` int(11) NULL COMMENT '使用者id', `consumption_sum` int(11) NULL COMMENT '消費額', `quota` int(11) NULL COMMENT '優惠券數額', PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1 ROW_FORMAT=COMPACT AVG_ROW_LENGTH=0;
-
-
在配置表中插入資料。將下列SQL語句粘貼到SQL地區,單擊執行。
新增資料SQL語句:
INSERT INTO activity_setting( has_promotion, consumption_limit, quota) VALUES('1','100','30'); -
業務表中插入資料。使用測試資料構建功能產生資料,具體請參見測試資料構建。
構建業務表consumption_records的資料:欄位 id(bigint(20) unsigned,主鍵自增非空)演算法為隨機自增,步長1;欄位 time(datetime,非空)演算法為隨機,範圍
[2000-01-01 00:00:00, 2021-01-01 00:00:00];欄位 count(int(11),非空)演算法為隨機,區間[1, 1000];欄位 user_id(bigint(20),非空)演算法為隨機,區間[1, 2000]。產生行數設為 10000,衝突處理選擇遇到資料衝突則跳過,然後單擊提交申請。
操作步驟
-
建立配置表、業務表和消費券發放表,並寫入資料。具體操作請參見環境準備。
-
新增任務流。
單擊控制台左上方的
表徵圖,選擇。說明若您使用的是非極簡模式的控制台,在頂部功能表列中,選擇。
-
單擊新增任務流。
-
在新建任務流對話方塊中,輸入任務流名稱和描述,單擊確認。
-
編排任務節點。
-
在左側任務類型列表中,分別拖拽單一實例SQL賦值、條件分支、單一實例SQL節點到畫布空白地區。
-
串連節點形成任務流。
將滑鼠放在單一實例SQL賦值節點上,單擊單一實例SQL賦值節點右側出現的空心圓點並拉出連接線,串連至條件分支節點上。
將滑鼠放在條件分支節點上,單擊條件分支節點右側出現的空心圓點並拉出連接線,串連至單一實例SQL節點上。

-
-
配置任務節點。
-
選中單一實例SQL賦值,配置單一實例SQL賦值節點。更多資訊,請參見配置單一實例SQL賦值。
-
選擇目標資料庫。
-
在SQL地區輸入如下SQL語句。
select * from activity_setting limit 1 -
在頁面右側的變數設定地區,增加三個輸出變數:Quota(發放紅包額度)、HasPromotion(是否有優惠活動)、ConsumptionLimit(消費額度限制)。
在左側 SQL 編輯地區輸入
select * from activity_setting limit 1。右側輸出變數的取值對應:Quota 指定行 0、指定列 2;HasPromotion 指定行 0、指定列 0;ConsumptionLimit 指定行 0、指定列 0。
-
-
選中條件分支,配置條件分支節點。具體操作,請參見配置條件分支。
配置條件運算式如下:在條件運算式中,將條件欄位設定為 HasPromotion(是否有優惠活動),運算子設定為 ==,值設定為 1。
-
選中單一實例SQL,配置單一實例SQL節點。
輸入SQL語句如下:
INSERT INTO `voucher_send_list`(`user_id`,`consumption_sum`,`quota`) SELECT * FROM (SELECT `user_id`, sum(count) AS consumption_sum,${Quota} FROM `consumption_records` WHERE `time` > '${bizdate}' GROUP BY `user_id`) `consumption_records` where `consumption_sum`>${ConsumptionLimit}
-
-
單擊畫布左上方的試運行按鈕,試運行任務流。
試運行完成後,在畫布下方的 執行日誌 Tab中可查看各節點的SQL執行結果,確認任務流程執行成功。
您可以在SQL視窗中,查看錶voucher_send_list中的資料,資料已成功插入優惠券發放表中。試運行完成後,DMS SQL Console 中執行
SELECT * FROM查詢,結果區返回 10 行資料,包含voucher_send_listLIMIT 20;Id、user_id、consumption_sum、quota等欄位,其中quota值均為 30,表明優惠券發放記錄已正確寫入。 -
可選:配置周期調度。
-
在編輯任務流頁面,單擊頁面下方的任務流資訊頁簽。
-
在調度配置地區,開啟開啟調度開關,配置調度。具體配置,請參見調度周期配置表。
-
-
發布任務流。任務流發布後,此任務流會根據設定的調度周期自動執行。
-
單擊畫布左上方的發布。
-
在發布對話方塊中輸入備忘資訊,並單擊確認,發布任務流。
-