DataWorks調度任務,可以按照需求設置數據傳輸的時間和頻率,并確保數據在傳輸和導入過程中的完整性和準確性。將MaxCompute分區表數據通過DataWorks導入Hologres分區表,實現兩個平臺的優勢相互結合,從而提高數據處理效率和可靠性。
前提條件
已購買并開通Hologres實例,開通方法請參見購買Hologres。
已開通MaxCompute并創建項目,詳情請參見開通MaxCompute和DataWorks。
已開通DataWorks服務并創建DataWorks工作空間,詳情請參見創建工作空間。
注意事項
請確保MaxCompute租戶級別或項目級別未開通Schema服務。關于Schema詳細介紹,請參見Schema操作。
操作步驟
MaxCompute數據準備。
單擊左側導航欄
。在數據分析頁面,單擊左側導航欄SQL。
在SQL查詢頁面,輸入SQL語句創建分區表,單擊運行。
本文以MaxCompute公共數據集public_data中的分區表dwd_ product_movie_basic_info為例。dwd_ product_movie_basic_info表結構示例如下。
--MaxCompute分區表DDL CREATE TABLE IF NOT EXISTS public_data.dwd_product_movie_basic_info( movie_name STRING COMMENT '電影名稱', director STRING COMMENT '導演', scriptwriter STRING COMMENT '編劇', area STRING COMMENT '制片地區/國家', actors STRING COMMENT '主演', `type` STRING COMMENT '類型', movie_length STRING COMMENT '電影長度', movie_date STRING COMMENT '上映日期', movie_language STRING COMMENT '語言', imdb_url STRING COMMENT 'imdb號' ) PARTITIONED BY (ds STRING) STORED AS ALIORC;
在SQL查詢頁面,輸入如下SQL語句用于查看分區表中的數據,單擊運行。
查看分區表20170112分區的數據。
SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';
Hologres中新建外部表。
新建一張Hologres外部表,用于映射MaxCompute源頭表數據。外表的字段順序和字段類型需要和MaxCompute表的一一對應。
登錄Hologres管理控制臺,進入HoloWeb開發頁面新建SQL查詢,詳情請參見新建SQL查詢。
在新增的臨時Query查詢頁面,選擇已創建的實例名和數據庫后,請您在SQL查詢的編輯框輸入如下語句,單擊運行。
如下語句使用
import foreign schema
命令,創建名稱為dwd_product_movie_basic_info的Hologres外部表。import foreign schema public_data limit to (dwd_product_movie_basic_info) from server odps_server into public options(if_table_exist 'update');
Hologres中新建真實存儲表(內部表)。
在Hologres中新建一張內部表,用于接收并存儲數據。
在HoloWeb開發頁面,單擊新增SQL窗口。
在新增的臨時Query查詢頁面,選擇已創建的實例名和數據庫后,請您在SQL查詢的編輯框輸入如下語句,單擊運行。
本次示例是將MaxCompute分區表導入Hologres,因此需要在Hologres中創建的內部表為分區表。
說明如下建表語句僅是簡單示例,實際建表DDL請根據實時業務需要創建,并給表設置合理的索引,以達到更優的查詢性能。
BEGIN; CREATE TABLE "public"."holo_dwd_product_movie_basic_info" ( "movie_name" text, "director" text, "scriptwriter" text, "area" text, "actors" text, "type" text, "movie_length" text, "movie_date" text, "movie_language" text, "imdb_url" text, "ds" text ) PARTITION BY LIST (ds); CALL SET_TABLE_PROPERTY('"public"."holo_dwd_product_movie_basic_info"', 'orientation', 'column'); comment on column "public"."holo_dwd_product_movie_basic_info"."movie_name" is '電影名稱'; comment on column "public"."holo_dwd_product_movie_basic_info"."director" is '導演'; comment on column "public"."holo_dwd_product_movie_basic_info"."scriptwriter" is '編劇'; comment on column "public"."holo_dwd_product_movie_basic_info"."area" is '制片地區/國家'; comment on column "public"."holo_dwd_product_movie_basic_info"."actors" is '主演'; comment on column "public"."holo_dwd_product_movie_basic_info"."type" is '類型'; comment on column "public"."holo_dwd_product_movie_basic_info"."movie_length" is '電影長度'; comment on column "public"."holo_dwd_product_movie_basic_info"."movie_date" is '上映日期'; comment on column "public"."holo_dwd_product_movie_basic_info"."movie_language" is '語言'; comment on column "public"."holo_dwd_product_movie_basic_info"."imdb_url" is 'imdb號'; COMMIT;
新建分區子表數據開發。
此步驟是一個Hologres SQL模塊,用于分區表跑調度。
登錄DataWorks控制臺,進入數據開發頁面,創建Hologres SQL節點,詳情請參見Hologres SQL節點。
在節點的編輯頁面,輸入如下語句。
在Hologres中不支持直接將分區數據直接寫入分區父表,因此需要在Hologres中創建對應MaxCompute分區表中分區鍵值的分區子表,然后將分區數據導入對應的分區子表。分區鍵值由參數${bizdate}控制,在調度系統中自動賦值完成周期性調度,調度參數的更多內容,請參見調度參數支持的格式。
說明導入的分區數據必須和分區鍵值(本文示例使用的是ds)保持一致,否則會出現報錯。
導入分區數據的邏輯場景比較多,下面有兩個場景供參考,請您根據實際業務邏輯兩者選其中一個。
場景一:導入新的分區數據。
--創建臨時分區子表 BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" text, "director" text, "scriptwriter" text, "area" text, "actors" text, "type" text, "movie_length" text, "movie_date" text, "movie_language" text, "imdb_url" text, "ds" text ); COMMIT; --更新外表數據 import foreign schema public_data limit to (dwd_product_movie_basic_info) from server odps_server into public options(if_table_exist 'update'); --等待30s再導入Hologres,以防Hologres meta信息更新緩存慢導致的數據不一致而同步不成功 select pg_sleep(30); --將MaxCompute數據導入臨時分區子表 INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; --導入新的分區數據 BEGIN; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; --將臨時分區子表綁定在分區父表上 ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES in ('${bizdate}'); COMMIT;
場景二:重新對歷史分區數據刷新。
--創建臨時分區子表 BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" text, "director" text, "scriptwriter" text, "area" text, "actors" text, "type" text, "movie_length" text, "movie_date" text, "movie_language" text, "imdb_url" text, "ds" text ); COMMIT; --更新外表數據 import foreign schema public_data limit to (dwd_product_movie_basic_info) from server odps_server into public options(if_table_exist 'update'); --等待30s再導入Hologres,以防Hologres meta信息更新緩存慢導致的數據不一致而同步不成功 select pg_sleep(30); --將MaxCompute數據導入臨時分區子表 INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; 重新對歷史分區數據刷新 BEGIN; ALTER TABLE IF EXISTS holo_dwd_product_movie_basic_info DETACH PARTITION holo_dwd_product_movie_basic_info_${bizdate}; DROP TABLE IF EXISTS holo_dwd_product_movie_basic_info_${bizdate}; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; --將分區子表綁定在分區父表上 ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES in ('${bizdate}'); COMMIT;
調度配置。
在Hologres SQL編輯頁面,單擊節點編輯區域右側的調度配置,配置節點的調度屬性。
說明需要更改的參數如下,未提及參數請保持默認值。
基礎屬性
參數
值
參數
bizdate=${yyyymmdd}
時間屬性
參數
值
生成實例方式
發布后即時生成
重跑屬性
運行成功后不可重跑,運行失敗后可以重跑
定時調度時間
00:05
調度依賴
調度依賴為root節點即可(也可以根據業務邏輯選擇已有的父節點)。請先將代碼解析選擇為是,然后單擊代碼解析,會自動解析出root節點,最后再將代碼解析選擇為否。
發布調度。
在Hologres SQL編輯頁面,單擊工具欄中的圖標,保存節點。
單擊工具欄中的圖標,提交節點。
在提交新版本對話框中,輸入變更描述。
單擊確認。
運維中心發布。
在Hologres SQL編輯頁面,單擊工具欄中最右側的運維。
進入運維中心頁面,單擊左側菜單欄周期任務運維>周期任務。
在周期任務頁面,右鍵單擊節點,選擇補數據>當前節點。
選擇左側菜單欄周期任務運維 > 補數據實例,查看正在運行的任務以及任務狀態。
查看數據。
任務執行成功之后,將會在Hologres中自動創建對應分區數據的分區子表。
進入DataStudio數據開發頁面,創建Hologres SQL節點。
在節點的編輯頁面,輸入如下語句,進行數據查詢。
查看分區子表數據。
select * from holo_dwd_product_movie_basic_info_20170112;
查看分區父表總數據。
select count (*) from holo_dwd_product_movie_basic_info;