閱讀570 返回首頁    go iPhone_iPad_Mac_手機_平板_蘋果apple


配置sql任務產出特征表__基礎示例—完整數據開發_場景教程_大數據開發套件-阿裏雲

根據分析,產出特征表還需要兩個中間表,且每個表產出都以ODPS SQL即可完成。本示例為了更形象的說明工作流配置,我們一個ODPS SQL節點產出一個表。所以需要創建3個ODPS SQL節點。具體操作如下:

步驟1:工作流(tmall_ub_features_demo)設計器的節點組件中向畫布拖拽3個ODPS SQL節點組件,進行創建。

■ 節點名稱分別為:b_cvr_demo、ub_action_demo、ub_features_demo。

■ 描述:對應上麵的節點名稱分別為:產出品牌轉化率表、產出用戶偏好表、產出用戶-品牌所有特征表。

此時看到工作流設計器上有4個節點1個同步任務,3個ODPS SQL任務如下圖:

tm_demo_workflow_1.JPG

步驟2:配置節點依賴。根據前麵的數據分析,中間表數據來自同步任務產出的源表,最終特征表數據來自兩個中間表,因此,節點的依賴關係如下圖:

tm_demo_workflow_2.JPG

步驟3:編輯ODPS SQL節點代碼,與參數配置(內置調度時間參數說明請看章節數據開發手冊 > 係統調度參數)。

分別雙擊SQL節點進入代碼編輯頁麵進行代碼編輯,代碼如下:

1)節點b_cvr_demo代碼與參數配置

--產出品牌轉化率表,前3個月品牌的購買用戶數/點擊數
INSERT OVERWRITE TABLE b_cvr_demo PARTITION (dt=${bdp.system.bizdate})
SELECT brand_id
    , CASE 
        WHEN click_cnt > 0 THEN buy_cnt / click_cnt
        ELSE 0
    END AS cvr
FROM (
    SELECT brand_id
        , COUNT(DISTINCT CASE 
            WHEN type = '1' THEN user_id
            ELSE NULL
        END) AS buy_cnt
        , COUNT(DISTINCT CASE 
            WHEN type = '0' THEN user_id
            ELSE NULL
        END) AS click_cnt
    FROM s_user_brand_demo
    WHERE dt >= ${before3mont}
    GROUP BY brand_id
) t1;

產出表分區表達式與前麵數據同步任務分區表達式一致,每次運行讀源表分區為前三個月分區,源表分區過濾條件 dt>=${before3mont}

參數配置如下圖:

b_cvr_demo_param.JPG

  • ${bdp.system.bizdate}變量在調度的時候會自動替換成業務日期,所以不需要賦值;

  • ${before3mont}自定義變量需要在此賦值,因為是取前3個月的數據,所以可以去當前節點實例定時時間減3個月即$[add_months(YYYYMMDD,-3)]。

2)節點ub_action_demo代碼與參數配置

--產出用戶偏好表,這裏統計用戶最近7天和最近3天的行為次數
INSERT OVERWRITE TABLE ub_action_demo PARTITION (dt=${bdp.system.bizdate})
SELECT user_id
    , brand_id
    , SUM(CASE 
        WHEN type = '1' THEN 1
        ELSE 0
    END) AS buy_cnt
    , SUM(CASE 
        WHEN type = '0'
        AND dt > '${before7days}' THEN 1
        ELSE 0
    END) AS click_d7
    , SUM(CASE 
        WHEN type = '2'
        AND dt > '${before7days}' THEN 1
        ELSE 0
    END) AS collect_d7
    , SUM(CASE 
        WHEN type = '3'
        AND dt > '${before7days}' THEN 1
        ELSE 0
    END) AS shopping_cart_d7
    , SUM(CASE 
        WHEN type = '0'
        AND dt > '${before3days}' THEN 1
        ELSE 0
    END) AS click_d3
    , SUM(CASE 
        WHEN type = '2'
        AND dt > '${before3days}' THEN 1
        ELSE 0
    END) AS collect_d3
    , SUM(CASE 
        WHEN type = '3'
        AND dt > '${before3days}' THEN 1
        ELSE 0
    END) AS shopping_cart_d3
FROM s_user_brand_demo
WHERE dt >= ${before7days} 
    and dt <= ${bdp.system.bizdate}
GROUP BY user_id, 
    brand_id;

參數配置如下圖:

ub_action_demo_param.JPG

  • ${bdp.system.bizdate}變量在調度的時候會自動替換成業務日期,所以不需要賦值;

  • ${before7days}和${before3days}需要的是業務日期的前7天和前3天,所以可以用調度時間參數$[yyyymmdd-8]和$[yyyymmdd-4],即當前節點實例定時時間年月日減8天/減4天。

3)節點ub_features_demo代碼與參數配置

INSERT OVERWRITE TABLE ub_features_demo PARTITION (dt=${bdp.system.bizdate})
SELECT t1.user_id
    , t1.brand_id
    , t1.buy_cnt
    , t1.click_d7
    , t1.collect_d7
    , t1.shopping_cart_d7
    , t1.click_d3
    , t1.collect_d3
    , t1.shopping_cart_d3
    , t2.cvr
FROM ub_action_demo t1
LEFT OUTER JOIN b_cvr_demo t2
ON t1.brand_id = t2.brand_id
    AND t1.dt = ${bdp.system.bizdate}
    AND t2.dt = ${bdp.system.bizdate};

${bdp.system.bizdate}變量在調度的時候會自動替換成業務日期,所以不需要賦值,代碼中沒用到其他自定義變量名,所以不需要配置參數。

步驟4:返回工作流設置器頁麵,點擊保存QK_6_8

到此,本示例的工作流配置算是已經完成,但是要想讓工作流根據配置每天自動調度,還需要把工作流提交到調度係統,即在工作流設計頁麵(整體視圖頁麵)點擊提交QK_10_2,在變更節點列表中選擇所有節點並點擊確定提交,提交成功則成功的把工作流提交到調度服務。

>>>下一步:測試任務>>>

最後更新:2016-11-23 16:04:08

  上一篇:go 配置數據導入任務__基礎示例—完整數據開發_場景教程_大數據開發套件-阿裏雲
  下一篇:go 補數據__基礎示例—完整數據開發_場景教程_大數據開發套件-阿裏雲