本文为您介绍如何使用实时数仓Hologres对接实时计算,快速搭建实时数仓分析大屏的最佳实践。
前提条件
开通Hologres并连接开发工具,详情请参见HoloWeb快速入门。
开通实时计算。
说明请确保实时计算和Hologres的地域相同。
开通DataV,详情请参见开通DataV服务。
背景信息
Hologres是阿里云的实时交互式分析产品,通过内置的实时数据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,用于制作实时大屏。操作步骤如下: