全部產品
Search
文件中心

DataWorks:加工資料

更新時間:Jun 28, 2025

本文為您介紹如何將同步至StarRocks的使用者資訊表ods_user_info_d_starrocks及訪問日誌資料ods_raw_log_d_starrocks,通過DataWorks的StarRocks節點加工得到目標使用者畫像資料,閱讀本文後,您可以瞭解如何通過DataWorks+StarRocks產品組合來計算和分析已同步的資料,完成數倉簡單資料加工情境。

前提條件

開始本案例前,請先完成同步資料中的操作。

  • 已通過Data Integration將儲存於MySQL的使用者基本資料ods_user_info_d同步至StarRocks的ods_user_info_d_starrocks表。

  • 已通過Data Integration將儲存於OSS的網站訪問日誌user_log.txt同步至StarRocks的ods_raw_log_d_starrocks表。

章節目標

本小節將對同步到StarRocks上的ods_user_info_d_starrocksods_raw_log_d_starrocks進行加工處理,並產生基本使用者畫像表。

  1. 將同步至StarRocks的日誌表ods_raw_log_d_starrocks將日誌資訊欄位拆分為多個欄位,並產生新的明細日誌表dwd_log_info_di_starrocks

  2. 利用明細日誌表dwd_log_info_di_starrocks和使用者表ods_user_info_d_starrocks的uid欄位進行關聯,產生匯總使用者日誌表dws_user_info_all_di_starrocks

  3. dws_user_info_all_di_starrocks表欄位較多,直接應用於資料消費,表資料較多,所以將其進一步加工為ads_user_info_1d_starrocks表。

進入資料開發

登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料開發與營運 > 資料開發,在下拉框中選擇對應工作空間後單擊進入資料開發

一、設計工作流程

同步資料階段,已經成功將資料同步至StarRocks,接下來的流程的目標是對資料進行進一步加工,以輸出基本使用者畫像資料。

  • 各層級節點以及工作邏輯。

    在商務程序畫布中單擊建立節點,建立以下節點,以供加工資料使用。

    節點分類

    節點類型

    節點名稱

    (以最終產出表命名)

    代碼邏輯

    資料庫

    imageStarRocks

    dwd_log_info_di_starrocks

    使用內建函數,自訂函數等完成原始日誌ods_raw_log_d_starrocks資料拆分寫入dwd_log_info_di_starrocks表多個欄位。

    資料庫

    imageStarRocks

    dws_user_info_all_di_starrocks

    使用者基本資料初步加工後的日誌資料進行匯總,合并為一張表。

    資料庫

    imageStarRocks

    ads_user_info_1d_starrocks

    進一步加工產出基本使用者畫像。

  • 流程DAG圖。

    將節點群組件拖拽至商務程序畫布,並通過拉線設定節點上下遊依賴的方式,設計資料加工階段的商務程序。

    image

二、建立函數

本案例通過上傳函數資源,將函數資源註冊為資料來源中的函數,實現在流程中使用該函數對資料進行處理,詳情可參見,建立資源及函數

說明

在StarRocks內使用Java UDF功能註冊函數前,需要在執行個體配置頁面,設定FE配置項enable_udfTRUE,並重啟執行個體使配置項生效。配置詳情可參見:參數配置

若未配置,則會報如下錯誤:

FAILED: Getting analyzing error. Detail message: UDF is not enabled in FE, please configure enable_udf=true in fe/conf/fe.conf or .

上傳函數

本案例已為您提供好自訂函數所用資源ip2region-starrocks.jar,請將其下載至本地後,登入Object Storage Service控制台,上傳至您的OSS Bucket路徑下。

說明

建立OSS Bucket 可參見建立儲存空間,在建立好的儲存空間裡可上傳該jar包,此操作會產生OSS儲存費用。

本案例OSS環境儲存路徑如下:

  • Bucket名稱:test(OSS Bucket名稱不允許重名,請自行定義該Bucket名稱)。

  • 資源儲存路徑:dataworks_starrocks/ip2region-starrocks.jar

  • 完整路徑:https://test.oss-cn-shanghai-internal.aliyuncs.com/dataworks_starrocks/ip2region-starrocks.jar請參考如下格式獲得完整資源儲存路徑。

    https://${Bucket名稱}.oss-cn-shanghai-internal.aliyuncs.com/${資源儲存路徑}

    說明
    • 自訂函數所在的Bucket網路地址使用ECS的傳統網路訪問(內網)地址。

    • 使用內網地址時需要OSS Bucket地區和DataWorks工作空間所在地區相同,本案例均在華東2(上海)地區。

    image

註冊函數

  1. 建立臨時查詢檔案。

    資料開發頁面的左側導覽列,單擊image,進入臨時查詢面板。按右鍵臨時查詢,選擇建立節點 > StarRocks

  2. 編輯並運行代碼。

    CREATE FUNCTION getregion(string)
    RETURNS string
    PROPERTIES ( 
        "symbol" = "com.starrocks.udf.sample.Ip2Region", 
        "type" = "StarrocksJar",
        "file" = "此處請替換檔案儲存體在oss的完整路徑,檔案路徑擷取請參見步驟上傳資源"
    );

    確認函數是否註冊成功。

    select getregion('您本機ip');

三、配置StarRocks節點

配置dwd_log_info_di_starrocks節點

在商務程序面板,雙擊StarRocks資料庫dwd_log_info_di_starrocks節點,進入dwd_log_info_di_starrocks節點的編輯頁面,編寫處理上遊表ods_raw_log_d_starrocks欄位的SQL代碼,並將其寫入dwd_log_info_di_starrocks表中。

1. 配置代碼

雙擊dwd_log_info_di_starrocks節點,進入節點配置頁面,編寫如下語句。

CREATE TABLE IF NOT EXISTS dwd_log_info_di_starrocks (
    uid STRING COMMENT '使用者ID',
    ip STRING COMMENT 'ip地址',
    TIME STRING COMMENT '時間yyyymmddhh:mi:ss',
    status STRING COMMENT '伺服器返回狀態代碼',
    bytes STRING COMMENT '返回給用戶端的位元組數',
    region STRING COMMENT '地區,根據ip得到',
    method STRING COMMENT 'http請求類型',
    url STRING COMMENT 'url',
    protocol STRING COMMENT 'http協議版本號碼',
    referer STRING COMMENT '來源url',
    device STRING COMMENT '終端類型 ',
    identity STRING COMMENT '訪問類型 crawler feed user unknown',
    dt DATE NOT NULL COMMENT '時間'
) DUPLICATE KEY(uid) 
COMMENT '使用者行為分析案例-網站訪問日誌明細表' 
PARTITION BY(dt) 
PROPERTIES ("replication_num" = "1");

-- 本樣本按欄位dt動態分區,為避免節點重跑資料重複寫入,通過以下命令實現每次加工前刪除已有目標資料分割。
ALTER TABLE dwd_log_info_di_starrocks DROP PARTITION IF EXISTS p${var} FORCE;

--情境:以下SQL使用函數getregion對原始日誌資料中的ip進行解析,並通過正則等方式,將未經處理資料拆解為可分析欄位寫入並寫入dwd_log_info_di_starrocks表。
--補充:
--     1. 在DataWorks節點中使用自訂函數前,您需要先註冊函數。
--     2. DataWorks提供調度參數,可實現調度情境下,將每日增量資料寫入目標表對應業務分區。
--        在實際開發情境下,您可通過${變數名}格式定義代碼變數,並在調度配置頁面通過為變數賦值調度參數的方式,實現調度情境下代碼動態入參。
INSERT INTO dwd_log_info_di_starrocks 
SELECT 
    uid
    , ip  
    , time
    , status
    , bytes 
    , getregion(ip) as region--使用自訂UDF通過IP得到地區
    ,REGEXP_EXTRACT(request, '([^ ]+)', 1) AS method
    ,REGEXP_EXTRACT(request, '^[^ ]+ (.*) [^ ]+$', 1) AS url
    ,REGEXP_EXTRACT(request, '([^ ]+)$', 1) AS protocol
    ,REGEXP_EXTRACT(referer, '^[^/]+://([^/]+)', 1) AS referer
  , CASE
    WHEN LOWER(agent) REGEXP 'android' THEN 'android'
    WHEN LOWER(agent) REGEXP 'iphone' THEN 'iphone'
    WHEN LOWER(agent) REGEXP 'ipad' THEN 'ipad'
    WHEN LOWER(agent) REGEXP 'macintosh' THEN 'macintosh'
    WHEN LOWER(agent) REGEXP 'windows phone' THEN 'windows_phone'
    WHEN LOWER(agent) REGEXP 'windows' THEN 'windows_pc'
    ELSE 'unknown'
END AS device
  , CASE
    WHEN LOWER(agent) REGEXP '(bot|spider|crawler|slurp)' THEN 'crawler'
    WHEN LOWER(agent) REGEXP 'feed' OR REGEXP_EXTRACT(request, '^[^ ]+ (.*) [^ ]+$', 0) REGEXP 'feed' THEN 'feed'
    WHEN NOT (LOWER(agent) REGEXP '(bot|spider|crawler|feed|slurp)') 
         AND agent REGEXP '^(Mozilla|Opera)' 
         AND NOT (REGEXP_EXTRACT(request, '^[^ ]+ (.*) [^ ]+$', 0) REGEXP 'feed') THEN 'user'
    ELSE 'unknown'
END AS identity,
 cast('${var}' as DATE )as dt
  FROM (
    SELECT
      SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 1)  AS ip
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 2)  AS uid
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 3)  AS time
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 4)  AS request
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 5)  AS status
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 6)  AS bytes
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 7)  AS referer
    , SPLIT_PART(CAST(col AS VARCHAR(65533)), '##@@', 8)  AS agent
FROM
    ods_raw_log_d_starrocks
WHERE
    dt = '${var}'
) a;

2. 配置調度

單擊dwd_log_info_di_starrocks節點編輯頁右側調度配置。配置詳情如下:

配置項

配置內容

圖示

調度參數

調度參數項中單擊新增參數,添加:

  • 參數名:var

  • 參數值:$[yyyymmdd-1]

image

調度依賴

調度依賴單擊從代碼解析輸入輸出,通過代碼血緣快速為節點設定依賴關係。

詳情請參見調度依賴配置指引

image

說明

時間屬性的配置,配置調度周期為日,無需單獨配置當前節點定時調度時間,當前節點每日調起時間由商務程序虛擬節點workshop_start_starrocks的定時調度時間控制,即每日00:30後才會調度。

3. 儲存配置

本案例其他必填配置項,您可按需自行配置,配置完成後,在節點代碼編輯頁面,單擊工具列中的image.png按鈕,儲存當前配置。

配置dws_user_info_all_di_starrocks節點

在商務程序面板中,雙擊StarRocks資料庫dws_user_info_all_di_starrocks節點,進入dws_user_info_all_di_starrocks節點的編輯頁面,編寫合并上遊表dwd_log_info_di_starrocksods_user_info_d_starrocks的SQL代碼,寫入dws_user_info_all_di_starrocks表中。

編輯代碼

雙擊dws_user_info_all_di_starrocks節點,進入節點配置頁面,編寫如下語句。

CREATE TABLE IF NOT EXISTS dws_user_info_all_di_starrocks (
    uid STRING COMMENT '使用者ID',
    gender STRING COMMENT '性別',
    age_range STRING COMMENT '年齡段',
    zodiac STRING COMMENT '星座',
    region STRING COMMENT '地區,根據ip得到',
    device STRING COMMENT '終端類型 ',
    identity STRING COMMENT '訪問類型 crawler feed user unknown',
    method STRING COMMENT 'http請求類型',
    url STRING COMMENT 'url',
    referer STRING COMMENT '來源url',
    TIME STRING COMMENT '時間yyyymmddhh:mi:ss',
    dt DATE NOT NULL COMMENT '時間'
) DUPLICATE KEY(uid) 
COMMENT '使用者行為分析案例-使用者網站訪問資訊寬表' 
PARTITION BY(dt) 
PROPERTIES ("replication_num" = "1");

-- 本樣本按欄位dt動態分區,為避免節點重跑資料重複寫入,通過以下命令實現每次加工前刪除已有目標資料分割。
ALTER TABLE dws_user_info_all_di_starrocks DROP PARTITION IF EXISTS p${var} FORCE;


-- 情境:將加工後的日誌資料dwd_log_info_di_starrocks 與使用者基本資料資料ods_user_info_d_starrocks匯總寫入dws_user_info_all_di_starrocks表。
-- 補充:DataWorks提供調度參數,可實現調度情境下,將每日增量資料寫入目標表對應業務分區。
--      在實際開發情境下,您可通過${變數名}格式定義代碼變數,並在調度配置頁面通過為變數賦值調度參數的方式,實現調度情境下代碼動態入參。
INSERT INTO dws_user_info_all_di_starrocks 
SELECT 
    IFNULL(a.uid, b.uid) AS uid,
    b.gender,
    b.age_range,
    b.zodiac,
    a.region,
    a.device,
    a.identity,
    a.method,
    a.url,
    a.referer,
    a.time,
    a.dt
FROM dwd_log_info_di_starrocks a
LEFT JOIN ods_user_info_d_starrocks b
ON a.uid = b.uid
WHERE a.dt = '${var}';

配置調度

單擊dws_user_info_all_di_starrocks節點編輯頁面右側的調度配置。配置詳情如下:

配置項

配置內容

圖示

調度參數

調度參數項中單擊新增參數,添加:

  • 參數名:var

  • 參數值:$[yyyymmdd-1]

image

調度依賴

調度依賴單擊從代碼解析輸入輸出,通過代碼血緣快速為節點設定依賴關係。

詳情請參見調度依賴配置指引

image

說明

時間屬性的配置,配置調度周期為日,無需單獨配置當前節點定時調度時間,當前節點每日調起時間由商務程序虛擬節點workshop_start_starrocks的定時調度時間控制,即每日00:30後才會調度。

3. 儲存配置

本案例其他必填配置項,您可按需自行配置,配置完成後,在節點代碼編輯頁面,單擊工具列中的image.png按鈕,儲存當前配置。

配置ads_user_info_1d_starrocks節點

在商務程序面板中,雙擊StarRocks資料庫中的ads_user_info_1d_starrocks節點,以進入該節點的編輯頁面。在此編寫SQL代碼,對上遊的dws_user_info_all_di_starrocks表進行加工處理,並將結果寫入ads_user_info_1d_starrocks表中。

1. 編輯代碼

CREATE TABLE IF NOT EXISTS ads_user_info_1d_starrocks (
uid STRING COMMENT '使用者ID',
region STRING COMMENT '地區,根據ip得到',
device STRING COMMENT '終端類型 ',
pv BIGINT COMMENT 'pv',
gender STRING COMMENT '性別',
age_range STRING COMMENT '年齡段',
zodiac STRING COMMENT '星座',
dt DATE NOT NULL COMMENT '時間'
) DUPLICATE KEY(uid) 
COMMENT '使用者行為分析案例-使用者畫像資料' 
PARTITION BY(dt) 
PROPERTIES ("replication_num" = "1");

-- 本樣本按欄位dt動態分區,為避免節點重跑資料重複寫入,通過以下命令實現每次加工前刪除已有目標資料分割。
ALTER TABLE ads_user_info_1d_starrocks DROP PARTITION IF EXISTS p${var} FORCE;

-- 情境:以下SQL用於對使用者訪問資訊寬表dws_user_info_d_all_di_starrocks 進一步加工產出基本的使用者畫像資料寫入ads_user_info_1d_starrocks 表。
-- 補充:DataWorks提供調度參數,可實現調度情境下,將每日增量資料寫入目標表對應業務分區。
-- 在實際開發情境下,您可通過${變數名}格式定義代碼變數,並在調度配置頁面通過為變數賦值調度參數的方式,實現調度情境下代碼動態入參。
INSERT INTO ads_user_info_1d_starrocks 
SELECT 
uid,
MAX(region) AS region,
MAX(device) AS device,
COUNT(*) AS pv,
MAX(gender) AS gender,
MAX(age_range) AS age_range,
MAX(zodiac) AS zodiac,
dt
FROM dws_user_info_all_di_starrocks
WHERE dt = '${var}'
GROUP BY uid, dt;


select * FROM dws_user_info_all_di_starrocks
WHERE dt = '${var}';

2. 配置調度

單擊ads_user_info_1d_starrocks節點編輯頁右側的調度配置。配置詳情如下:

配置項

配置內容

圖示

調度參數

調度參數項中單擊新增參數,添加:

  • 參數名:var

  • 參數值:$[yyyymmdd-1]

image

調度依賴

調度依賴單擊從代碼解析輸入輸出,通過代碼血緣快速為節點設定依賴關係。

詳情請參見調度依賴配置指引

image

說明

時間屬性的配置,配置調度周期為日,無需單獨配置當前節點定時調度時間,當前節點每日調起時間由商務程序虛擬節點workshop_start_starrocks的定時調度時間控制,即每日00:30後才會調度。

3. 儲存配置

本案例其他必填配置項,您可按需自行配置,配置完成後,在節點代碼編輯頁面,單擊工具列中的image.png按鈕,儲存當前配置。

四、運行任務

運行商務程序

  1. 進入商務程序面板。

    雙擊商務程序下的用戶Portrait analysis_StarRocks版,進入商務程序畫布。image

  2. 運行商務程序。

    在商務程序畫布,單擊工具列中的image表徵圖,將按照上下遊依賴關係運行資料繼承階段的商務程序。

  3. 查看任務運行狀態。

    節點處於image狀態,即代表同步執行過程無問題。

  4. 查看任務執行日誌。

    右鍵畫布中的dwd_log_info_di_starrocks節點、dws_user_info_all_di_starrocks節點、ads_user_info_1d_starrocks節點,選擇查看日誌,即可查看詳細的同步過程。image

查看流程結果

  1. 建立臨時查詢檔案,詳情可參見建立臨時查詢

    在資料開發頁面的左側導覽列,單擊image,進入臨時查詢面板。按右鍵臨時查詢,選擇建立節點 > StarRocks

  2. 查詢加工結果表。

    執行如下SQL語句,確認使用者基本資料資料,以及使用者網站訪問日誌資料是否已經從測試庫同步至您的StarRocks。

    --查詢語句中的分區列需要更新為業務日期。例如,任務啟動並執行日期為20240102,則業務日期為20240101,即任務運行日期的前一天。
    SELECT * from ads_user_info_1d_starrocks  where dt=業務日期; 

五、調度任務

在完成前幾步的資料處理並確定任務可正常運行後,需要將任務提交並發布到生產環境,詳情請參見發布中心

提交至開發環境

在商務程序面板工具列中,單擊image按鈕,提交整個商務程序中的任務,並單擊確認

發布至生產環境

提交後任務將進入開發環境。由於開發環境的任務不會自動調度,您需要發布任務至生產環境。

在商務程序頁面,單擊工具列中的image表徵圖,進入發佈頁面,或單擊菜單資料開發與營運 > 任務發布進入建立發布包頁面,在建立發布包頁面,有以下兩種發布方式可選。

  • 單個條目發布:單擊單個任務條目右側的發布按鈕進行發布。image

  • 批量打包發布:

    • 選擇多個條目,並單擊下方發布選中項進行發布。

    • 選擇多個條目,單擊添加到待發布,再單擊右上方的待發布列表,批量將待發布任務發布至生產環境。image

說明

批量發布目標任務,您需要同步發布該商務程序涉及的資源與函數。

六、資料回溯

在實際開發情境下,您可以通過生產環境執行補資料並查看補資料執行個體(新版)操作實現歷史資料回刷,具體操作如下。

  1. 進入營運中心。

    任務發布成功後,單擊右上方的營運中心,或單擊菜單全部產品 > 資料開發與營運 > 營運中心(工作流程)進入營運頁面。

  2. 針對周期任務執行補資料操作。

    1. 在左側導覽列,單擊周期任務營運 > 周期任務,進入周期任務頁面,單擊起始虛擬節點workshop_start_starrocks,進入DAG圖image

    2. 按右鍵workshop_start_starrocks節點,選擇補資料 > 當前節點及下遊節點image

    3. 選中workshop_start_starrocks節點的所有下遊節點,輸入業務日期,單擊確定,自動跳轉至補資料執行個體頁面。image

後續步驟

在完成任務發布後,整個商務程序已經完成,即可查看已建立的表詳情或消費對應資料表。詳情可參見管理資料API資料服務