本文以“使用DataWorks實時同步公共數據至Hologres,并通過Hologres進行實時數據分析”為例,為您展示DataWorks的數據同步能力與Hologres的實時分析能力。本教程以申請免費資源為例為您示例詳細操作步驟,您也可以使用付費資源,操作類似。
教程簡介
本教程基于GitHub Archive公開數據集,通過DataWorks將GitHub中的項目、行為等20多種事件類型數據實時采集至Hologres進行分析,同時使用DataV內置模板,快速搭建實時可視化數據大屏,從開發者、項目、編程語言等多個維度了解GitHub實時數據變化情況。
我能學到什么
學會通過DataWorks實時同步數據。
熟悉使用DataV大屏進行可視化操作。
操作難度 | 易 |
所需時間 | 55分鐘 |
使用的阿里云產品 | |
所需費用 |
|
準備環境和資源
新用戶準備阿里云賬號
進入阿里云官網,單擊免費注冊,創建阿里云賬號。
對阿里云賬號進行實名認證。
創建訪問密鑰AccessKey。
成功創建AccessKey后,返回AccessKey頁面。您可查看當前賬號的AccessKey狀態。
相關操作,詳情請參見準備阿里云賬號。
創建專有網絡VPC和交換機
為確保后續任務的網絡連通,請務必保證DataWorks資源組與Hologres使用同一個VPC。創建VPC及交換機操作如下:
登錄專有網絡管理控制臺,在頂部菜單欄切換至華東2(上海)地域。
在左側導航欄單擊專有網絡。
在專有網絡頁面,單擊創建專有網絡。
在創建專有網絡頁面,配置1個專有網絡(VPC)和1臺交換機,交換機的可用區選擇上??捎脜^E,然后單擊確定。詳情請參見創建專有網絡和交換機。
單擊已創建的VPC實例ID,在資源管理頁簽添加安全組。詳情請參見創建安全組。
為VPC綁定EIP
本教程使用了GitHub Archive公開數據集,DataWorks的通用型資源組默認不具備公網能力,因此需要為資源組綁定的VPC配置公網NAT網關,使其與公開數據網絡打通,從而獲取數據。
登錄專有網絡-公網NAT網關控制臺,在頂部菜單欄切換至華東2(上海)地域。
單擊創建NAT網關。配置相關參數:
參數
取值
所屬地域
華東2(上海)。
所屬專有網絡
選擇已創建的VPC和交換機。
關聯交換機
訪問模式
VPC全通模式(SNAT)。
彈性公網IP
新購彈性公網IP。
說明上表中未說明的參數保持默認值即可。
單擊立即購買,勾選服務協議后,單擊確認訂單,完成購買。
申請Hologres免費試用
登錄Hologres免費試用,單擊立即試用,在彈出的實時數倉Hologres界面配置參數信息。本試用教程以表格中的參數信息為例,未提及參數保持默認值。
參數
示例值
地域
華東2(上海)
實例類型
通用型
可用區
可用區E
計算資源
32核128G(計算節點數量:2)
專有網絡(VPC)
選擇已創建的VPC。
專有網絡交換機
選擇已創建的交換機。
實例名稱
hologres_test
服務關聯角色
按照界面指引創建。
角色名稱:
AliyunServiceRoleForHologresIdentityMgmt
權限說明:Hologres使用此角色來訪問您在其他云產品中的資源。
資源組
默認資源組
勾選服務協議后,單擊立即試用,并根據頁面提示完成試用申請。
單擊控制臺,開啟試用體驗。
申請MaxCompute免費試用
體驗本文案例,您需開通DataWorks及MaxCompute。對于MaxCompute,可選擇如下類型產品:
免費試用:您可申請MaxCompute提供的免費試用資源。試用期結束后,如需繼續使用,則會收取相應費用。詳情請參見新用戶免費試用額度。
按量付費:開通DataWorks時,平臺默認為您開通按量付費的MaxCompute。
如需使用免費試用的MaxCompute,請務必在“開通DataWorks”前執行“申請MaxCompute免費試用”操作。
在云原生大數據計算服務 MaxCompute卡片上,單擊立即試用。
在彈出的試用云原生大數據計算服務 MaxCompute產品的面板中配置開通地域為華東2(上海),其他參數保持默認。
勾選服務協議,單擊立即試用,并根據頁面提示完成試用申請。
開通DataWorks
體驗本文案例,您需開通DataWorks的基礎版產品及資源組,以及MaxCompute產品。開通流程如下:
對于MaxCompute,您可選擇如下類型產品:
免費試用:您可申請MaxCompute提供的免費試用資源。試用期結束后,如需繼續使用,則會收取相應費用。詳情請參見新用戶免費試用額度。
按量付費:開通DataWorks后,為幫助您體驗核心場景,平臺默認為您開通按量付費的MaxCompute。
如需使用免費試用的MaxCompute,請務必在“開通DataWorks”前執行“申請MaxCompute免費試用”操作。
進入DataWorks服務開通頁。
進入阿里云DataWorks官網,單擊立即開通,即可進入DataWorks服務開通頁。
按如下配置購買產品。
參數
配置
地域
華東2(上海)
DataWorks版本
基礎版
資源組
名稱:自定義。
網絡配置:選擇已創建的VPC和交換機。
說明VPC及交換機將自動綁定至創建的資源組中,后續可直接進行數據同步使用。
服務關聯角色:按界面指引創建。
角色名稱:
AliyunServiceRoleForDataWorks
角色權限策略:
AliyunServiceRolePolicyForDataWorks
勾選服務協議,按界面指引完成支付。更多購買產品的參考,請參見開通DataWorks服務。
說明DataWorks服務開通后,平臺將為您創建默認的工作空間,且新建的資源組默認歸屬該工作空間,您可直接使用。
DataWorks服務開通后,請前往授權頁面,授予DataWorks進行云資源訪問權限。
申請DataV免費試用
登錄DataV數據可視化官網,單擊立即購買。
在產品版本區域,單擊
下方的0元試用。單擊立即購買,按照界面指引開通。
創建Hologres表
初始化Hologres環境。
進入Hologres控制臺-實例列表頁面,單擊目標實例名稱,進入實例詳情頁面。
在實例詳情頁面單擊登錄實例,進入HoloWeb。
在元數據管理頁面中單擊數據庫。
在新建數據庫對話框中配置如下參數,并單擊確認。
參數
說明
實例名
選擇在哪個Hologres實例上創建數據庫。默認展示當前已登錄實例的名稱,您也可以在下拉框中選擇其他Hologres實例。
數據庫名稱
本示例數據庫名稱設置為
holo_tutorial
。權限策略
選擇默認的SPM。更多關于權限策略的說明,請參見:
SPM:簡單權限模型,該權限模型授權是以DB為粒度,劃分admin(管理員)、developer(開發者)、writer(讀寫者)以及viewer(分析師)四種角色,您可以通過少量的權限管理函數,即可對DB中的對象進行方便且安全的權限管理。
SLPM:基于Schema級別的簡單權限模型,該權限模型以Schema為粒度,劃分 <db>.admin(DB管理員)、<db>.<schema>.developer(開發者)、<db>.<schema>.writer(讀寫者)以及 <db>.<schema>.viewer(分析師),相比于簡單權限模型更為細粒度。
專家:Hologres兼容PostgreSQL,使用與Postgres完全一致的權限系統。
立即登錄
選擇是。
進入頂部菜單欄的SQL編輯器頁面,單擊左上角的圖標,打開臨時Query查詢頁面。
新建Hologres內部表。
在臨時Query查詢頁面執行如下示例命令,創建Hologres內部表
hologres_dataset_github_event.hologres_github_event
,后續會將數據實時寫入至該表中。-- 新建schema用于創建內表并導入數據 CREATE SCHEMA IF NOT EXISTS hologres_dataset_github_event; DROP TABLE IF EXISTS hologres_dataset_github_event.hologres_github_event; BEGIN; CREATE TABLE hologres_dataset_github_event.hologres_github_event ( id bigint PRIMARY KEY, actor_id bigint, actor_login text, repo_id bigint, repo_name text, org_id bigint, org_login text, type text, created_at timestamp with time zone NOT NULL, action text, commit_id text, member_id bigint, language text ); CALL set_table_property ('hologres_dataset_github_event.hologres_github_event', 'distribution_key', 'id'); CALL set_table_property ('hologres_dataset_github_event.hologres_github_event', 'event_time_column', 'created_at'); CALL set_table_property ('hologres_dataset_github_event.hologres_github_event', 'clustering_key', 'created_at'); COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.id IS '事件ID'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.actor_id IS '事件發起人ID'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.actor_login IS '事件發起人登錄名'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.repo_id IS 'repoID'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.repo_name IS 'repo名稱'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.org_id IS 'repo所屬組織ID'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.org_login IS 'repo所屬組織名稱'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.type IS '事件類型'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.created_at IS '事件發生時間'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.action IS '事件行為'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.commit_id IS '提交記錄ID'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.member_id IS '成員ID'; COMMENT ON COLUMN hologres_dataset_github_event.hologres_github_event.language IS '編程語言'; COMMIT;
實時同步數據至Hologres
該數據源僅支持數據同步場景去讀取使用,其他模塊不支持。
創建同步任務所需的數據源。
登錄DataWorks控制臺,切換至華東2(上海)地域后,單擊左側導航欄的管理中心,在下拉框中選擇對應工作空間后單擊進入管理中心。
單擊左側導航欄的
。在數據源頁面單擊新增數據源。
按照界面指引創建MySQL及Hologres數據源。數據源的核心參數配置如下。
MySQL數據源:來源數據源。
參數
說明
數據源名稱
自定義。本文以mysqlData為例。
配置模式
選擇連接串模式。
JDBC連接地址
單擊新增地址,配置信息如下:
主機地址IP:
rm-bp1z69dodhh85z9qa.mysql.rds.aliyuncs.com
端口號:
3306
輸入數據庫名稱后,完整的JDBC URL為
jdbc:mysql://rm-bp1z69dodhh85z9qa.mysql.rds.aliyuncs.com:3306/github_events_share
。數據庫名稱
github_events_share
用戶名
workshop
密碼
workshop#2017
此密碼僅為本教程示例,請勿在實際業務中使用。
認證選項
無認證。
Hologres數據源:去向數據源。
參數
說明
數據源名稱
自定義。本文示例為
hologresData
。認證方式
默認為阿里云賬號及阿里云RAM角色。
所屬云賬號
當前阿里云主賬號。
地域
華東2(上海)。
Hologres實例
選擇已創建的實例。
數據庫名稱
填寫上述已創建的Hologres數據庫名稱
holo_tutorial
。默認訪問身份
選擇阿里云主賬號。
認證選項
無認證。
創建實時同步任務。
進入DataWorks數據集成頁面。
在創建同步任務中,選擇來源與去向數據源,單擊開始創建。
來源:選擇MySQL。
去向:選擇Hologres。
配置任務基本信息。
新任務名稱:data_test。
同步類型:整庫實時。
配置任務網絡連通。
實時同步任務設置。
在選擇要同步的庫表區域,勾選MySQL中的github表,添加至已選庫表。
在目標表映射區域,勾選對應表,單擊批量刷新映射。
基于上述已創建的Hologres內部表,將目標表名改為
hologres_github_event
,目標Schema名改為hologres_dataset_github_event
,單擊完成配置。在任務列表頁面啟動任務,查看執行詳情。
公共數據源MySQL中保留近7天數據,離線數據將會通過全量進行同步,實時數據將在全量初始化完成后,實時寫入Hologres。
待數據同步成功后,前往Hologres進行實時數據分析。
實時數據分析與可視化
實時數據分析。
進入HoloWeb SQL編輯器,查詢實時更新的過去24小時GitHub最活躍項目。
SELECT repo_name, COUNT(*) AS events FROM hologres_dataset_github_event.hologres_github_event WHERE created_at >= now() - interval '1 day' GROUP BY repo_name ORDER BY events DESC LIMIT 5;
可以在元數據管理中自定義實時查詢與分析Hologres近7天的數據。后續將其他維度的實時查詢分析結果對接到DataV大屏,SQL樣例可以查看附錄。
實時數據可視化。
基于DataV自帶模板,快速完成數據可視化大屏搭建。
前往DataV控制臺,在左側導航欄中選擇數據準備 > 數據源。
在數據源頁面,單擊新建數據源。
在彈出的添加數據源面板中,根據下表參數信息新增Hologres數據源,并單擊確定。
參數
說明
類型
實時數倉 Hologres
網絡
內網
華東2
VPC ID
在Hologres管控臺-實例列表中單擊目標實例名稱,在實例詳情頁面的網絡信息區域獲取VPC ID。
VPC 實例 ID
在Hologres管控臺-實例列表中單擊目標實例名稱,在實例詳情頁面的網絡信息區域獲取VPC實例 ID。
名稱
自定義命名。
域名
在Hologres管控臺-實例列表中單擊目標實例名稱,在實例詳情頁面的網絡信息區域獲取域名。
用戶名
進入AccessKey管理頁面獲取AccessKey ID。
密碼
進入AccessKey管理頁面獲取AccessKey Secret。
端口
在Hologres管控臺-實例列表中單擊目標實例名稱,在實例詳情頁面的網絡信息區域,獲取指定VPC的域名列對應的端口。例如:80。
數據庫
選擇上述已創建的Hologres數據庫名稱。
前往DataV控制臺,單擊未分組頁面的創建 PC 端看板,選擇使用Hologres實時分析GitHub事件數據模板創建看板。
在創建看板對話框輸入看板名稱后,單擊創建看板。
在已創建的看板頁面中,單擊數字,并在右側數據源頁簽中,選擇已添加的Hologres數據源。共計需要選擇15處。
所有數字涉及的數據源都選擇完成后,單擊看板右上角的預覽,即可獲取實時更新的數據大屏預覽鏈接(正式發布需要升級DataV高級版本)。最終效果如下:
(可選)歷史離線數據分析
實時數倉Hologres與大數據計算服務MaxCompute深度融合,可以組成一體化的大數據查詢與分析架構。在MaxCompute公共數據集中,存儲了歷史GitHub全量數據。如果想要做更長時間的數據分析,有兩種方式:
使用外部表查詢,在不導入數據的情況下,使用Hologres直接查詢MaxCompute數據。
使用內部表查詢,將歷史數據通過0 ETL的形式快速導入Hologres,獲得更快的查詢速度。
Github每日數據量約為300MB,Hologres免費試用存儲額度為20GB,如果導入過多存量歷史數據,將會收產生額外費用,外部表查詢不受影響。
外部表查詢MaxCompute數據。
創建MaxCompute外部表。
DROP FOREIGN TABLE IF EXISTS dwd_github_events_odps; IMPORT FOREIGN SCHEMA "bigdata_public_dataset#github_events" LIMIT to ( dwd_github_events_odps ) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'error',if_unsupported_type 'error');
通過外部表直接查詢MaxCompute數據。例如查詢昨日起最活躍項目:
SELECT repo_name, COUNT(*) AS events FROM dwd_github_events_odps WHERE ds >= (CURRENT_DATE - interval '1 day')::text GROUP BY repo_name ORDER BY events DESC LIMIT 5;
0 ETL導入MaxCompute數據。
創建Hologres內部表。
DROP TABLE IF EXISTS gh_event_data; BEGIN; CREATE TABLE gh_event_data ( id bigint, actor_id bigint, actor_login text, repo_id bigint, repo_name text, org_id bigint, org_login text, type text, created_at timestamp with time zone NOT NULL, action text, iss_or_pr_id bigint, number bigint, comment_id bigint, commit_id text, member_id bigint, rev_or_push_or_rel_id bigint, ref text, ref_type text, state text, author_association text, language text, merged boolean, merged_at timestamp with time zone, additions bigint, deletions bigint, changed_files bigint, push_size bigint, push_distinct_size bigint, hr text, month text, year text, ds text ); CALL set_table_property('public.gh_event_data', 'distribution_key', 'id'); CALL set_table_property('public.gh_event_data', 'event_time_column', 'created_at'); CALL set_table_property('public.gh_event_data', 'clustering_key', 'created_at'); COMMIT;
通過外部表導入數據至內部表。
INSERT INTO gh_event_data SELECT * FROM dwd_github_events_odps WHERE ds >= (CURRENT_DATE - interval '1 day')::text; -- 更新表的統計信息 ANALYZE gh_event_data;
通過內部表查詢昨日起最活躍項目。
SELECT repo_name, COUNT(*) AS events FROM gh_event_data WHERE ds >= (CURRENT_DATE - interval '1 day')::text GROUP BY repo_name ORDER BY events DESC LIMIT 5;
附錄
實驗中包含數據大屏涉及到的所有SQL如下,需要將下面的<table_name>分別換成實際的表名。
今日開發者和項目總數。
SELECT uniq (actor_id) actor_num, uniq (repo_id) repo_num FROM <table_name> WHERE created_at > date_trunc('day', now());
過去24小時最活躍項目。
SELECT repo_name, COUNT(*) AS events FROM <table_name> WHERE created_at >= now() - interval '1 day' GROUP BY repo_name ORDER BY events DESC LIMIT 5;
過去24小時最活躍開發者。
SELECT actor_login, COUNT(*) AS events FROM <table_name> WHERE created_at >= now() - interval '1 day' and actor_login not like '%[bot]' GROUP BY actor_login ORDER BY events DESC LIMIT 5;
今日公開事件總數。
select count(*) from <table_name> where created_at >= date_trunc('day', now());
過去24小時星標項目排行。
SELECT repo_id, repo_name, COUNT(actor_login) total FROM <table_name> WHERE type = 'WatchEvent' AND created_at > now() - interval '1 day' GROUP BY repo_id, repo_name ORDER BY total DESC LIMIT 10; WITH agg_language AS ( SELECT CASE LANGUAGE WHEN 'TypeScript' THEN 'TypeScript' WHEN 'JavaScript' THEN 'JavaScript' WHEN 'Python' THEN 'Python' WHEN 'Go' THEN 'Go' WHEN 'Java' THEN 'Java' WHEN 'HTML' THEN 'HTML' WHEN 'C++' THEN 'C++' WHEN 'C#' THEN 'C#' WHEN 'PHP' THEN 'PHP' WHEN 'Ruby' THEN 'Ruby' ELSE 'Others' END AS LANGUAGE, count(*) total FROM <table_name> WHERE created_at > now() - interval '1 hour' AND LANGUAGE IS NOT NULL GROUP BY LANGUAGE ORDER BY total DESC ) SELECT LANGUAGE, sum(total) AS sum FROM agg_language GROUP BY LANGUAGE ORDER BY sum DESC;
實時事件展示。
SELECT cast(created_at as text), actor_login, type, repo_name FROM <table_name> ORDER BY created_at DESC LIMIT 5;
完成
完成以上操作后,您已經成功完成了Hologres數據查詢操作。查詢命令執行成功后,在臨時Query查詢頁面下彈出結果頁簽,顯示如下查詢數據結果。
查詢實時更新的過去24小時GitHub最活躍項目結果示例:
通過外部表直接查詢MaxCompute數據(查詢昨日起最活躍項目)結果示例:
通過內部表查詢昨日起最活躍項目。
清理及后續
在體驗完成本教程后,如果后續您不再使用的話,請及時釋放相關資源。
歡迎加入實時數倉Hologres交流群(釘釘群號:32314975)交流。
刪除DataV數據源
登錄DataV管理控制臺,在數據源頁面,找到目標數據源并刪除。
刪除DataWorks中同步任務和數據源
登錄DataWorks管理控制臺-同步任務頁面,找到目標任務,在操作列單擊更多 > 刪除,按照界面提示刪除同步任務。
登錄DataWorks管理控制臺-數據源頁面,找到目標數據源,在操作列單擊圖標,按照界面提示刪除數據源。
釋放Hologres實例
登錄Hologres管理控制臺,在實例列表頁面釋放目標Hologres實例,詳情請參見刪除實例。
釋放公網NAT網關
登錄專有網絡-公網NAT網關控制臺,找到目標NAT網關,然后在操作列單擊 ,按照界面提示釋放實例。
釋放彈性公網IP
登錄專有網絡-彈性公網IP控制臺,找到目標彈性公網IP,然后在操作列單擊 ,按照界面提示釋放實例。
釋放交換機
登錄專有網絡管理控制臺,在交換機頁面,找到目標交換機,然后在操作列單擊刪除,按照界面提示釋放實例。
釋放專有網絡VPC
登錄專有網絡管理控制臺,在專有網絡頁面,找到目標VPC,然后在操作列單擊刪除,按照界面提示釋放實例。