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;