本文為您介紹如何使用實時數倉Hologres對接實時計算,快速搭建實時數倉分析大屏的最佳實踐。
前提條件
開通Hologres并連接開發工具,詳情請參見DataWorks快速入門或連接HoloWeb并執行查詢。
開通實時計算,詳情請參見實時計算購買流程。
說明請確保實時計算和Hologres的地域相同。
開通DataV,詳情請參見開通DataV服務。
背景信息
Hologres是阿里云的實時交互式分析產品,通過內置的實時數據API(詳情請參見實時數據API)直接對接實時計算,實現高并發實時寫入或查詢實時數據,速度達到秒級。
Hologres兼容PostgreSQL,將查詢到的數據直接對接BI分析工具,使用可視化方式快速分析和展現數據。
本文以搭建某電商店鋪實時運營指標大屏為例,展示店鋪的總流量、每個商店的訪問量、區域銷售量和熱銷商品數據。
使用Hologres搭建實時運營指標大屏的完整鏈路圖如下所示。
采集源數據并實時寫入實時計算,通過實時計算清洗并聚合數據。
實時寫入處理后的數據至Hologres,使用Hologres進行交互式查詢。
Hologres對接數據大屏DataV,展示實時運營指標大屏。
操作步驟
獲取源數據。
通過流式數據服務DataHub或者其他業務日志獲取源數據。
為了方便流程操作,本試驗從實時計算直接產生數據,詳情請參見第3步。
Hologres創建數據接收表。
使用Holoweb創建字段和數據類型與源表相同的表,用于接收實時寫入的數據。SQL語句示例如下。
BEGIN; CREATE TABLE public.order_details ( "user_id" int8, "user_name" text, "item_id" int8, "item_name" text, "price" numeric(38,2), "province" text, "city" text, "ip" text, "longitude" text, "latitude" text, "sale_timestamp" timestamptz NOT NULL ); CALL SET_TABLE_PROPERTY('public.order_details','orientation', 'column'); CALL SET_TABLE_PROPERTY('public.order_details','clustering_key', 'sale_timestamp:asc'); CALL SET_TABLE_PROPERTY('public.order_details','segment_key', 'sale_timestamp'); CALL SET_TABLE_PROPERTY('public.order_details','bitmap_columns', 'user_name,item_name,province,city,ip,longitude,latitude'); CALL SET_TABLE_PROPERTY('public.order_details','dictionary_encoding_columns','user_name:auto,item_name:auto,province:auto,city:auto,ip:auto,longitude:auto,latitude:auto'); CALL SET_TABLE_PROPERTY('public.order_details','time_to_live_in_seconds', '3153600000'); CALL SET_TABLE_PROPERTY('public.order_details','distribution_key', 'user_id'); CALL SET_TABLE_PROPERTY('public.order_details','storage_format', 'orc'); COMMIT;
實時計算清洗數據。
進入實時計算開發平臺,使用實時計算清洗并聚合源數據,通過實時數據API將數據實時寫入Hologres。SQL語句示例如下。
CREATE TEMPORARY table source_table ( user_id BIGINT, user_name VARCHAR, item_id BIGINT, item_name VARCHAR, price numeric (38, 2), province VARCHAR, city VARCHAR, longitude VARCHAR, latitude VARCHAR, ip VARCHAR, sale_timestamp TIMESTAMP ) with ('connector' = 'ordergen'); CREATE TEMPORARY table hologres_sink ( user_id BIGINT, user_name VARCHAR, item_id BIGINT, item_name VARCHAR, price numeric (38, 2), province VARCHAR, city VARCHAR, longitude VARCHAR, latitude VARCHAR, ip VARCHAR, sale_timestamp TIMESTAMP ) with ( 'connector' = 'hologres', 'dbname' = 'Hologres的數據庫名', 'tablename' = 'Hologres接收數據的表名', 'username' = '當前云賬號的AccessKey ID', 'password' = '當前云賬號的AccessKey Secret', 'endpoint' = 'Hologres的VPC網絡地址:端口' ); insert into hologres_sink select user_id, user_name, item_id, item_name, price, province, city, longitude, latitude, ip, sale_timestamp from source_table;
發布實時作業。
提交并發布填寫完成的作業至生產環境。操作步驟如下:
引用資源包。
發布作業。
成功引用資源包后,保存作業。單擊上線,根據業務配置資源參數,提交作業至生產環境。
啟動作業。
作業發布后,前往運維界面,手動啟動作業。
實時查詢數據。
根據業務情況,在Hologres中從不同維度實時查詢實時寫入的數據,示例如下。
select sum(price) as "GMV" from order_details ; select count(distinct user_id) as "UV" from order_details ; select city as "城市", count(distinct user_id) as "購買用戶數" from order_details group by "城市" order by "購買用戶數" desc limit 100; select item_name as "商品", sum(price) as "銷售額" from order_details group by "商品" order by "銷售額" desc limit 100; select to_char(sale_timestamp, 'MM-DD') as "日期", sum(price) as "GMV" fromorder_details group by "日期" order by "GMV" desc limit 100;
展示DataV實時大屏。
Hologres中查詢出的數據直接對接DataV,用于制作實時大屏。操作步驟如下: