快速搭建实时数仓分析大屏

本文为您介绍如何使用实时数仓Hologres对接实时计算,快速搭建实时数仓分析大屏的最佳实践。

前提条件

背景信息

Hologres是阿里云的实时交互式分析产品,通过内置的实时数据API(详情请参见实时数据API直接对接实时计算,实现高并发实时写入或查询实时数据,速度达到秒级。

Hologres兼容PostgreSQL,将查询到的数据直接对接BI分析工具,使用可视化方式快速分析和展现数据。

本文以搭建某电商店铺实时运营指标大屏为例,展示店铺的总流量、每个商店的访问量、区域销售量和热销商品数据。

使用Hologres搭建实时运营指标大屏的完整链路图如下所示。a

  • 采集源数据并实时写入实时计算,通过实时计算清洗并聚合数据。

  • 实时写入处理后的数据至Hologres,使用Hologres进行交互式查询。

  • Hologres对接数据大屏DataV,展示实时运营指标大屏。

操作步骤

  1. 获取源数据。

    通过流式数据服务DataHub或者其他业务日志获取源数据。

    为了方便流程操作,本试验从实时计算直接产生数据,详情请参见第3步。

  2. 在Hologres中创建数据接收表。

    使用Holoweb创建与源表字段及数据类型相同的表,用于接收实时写入的数据。具体操作请参见连接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;
  3. 实时计算控制台中,上传自定义Connector JAR资源ordergen。具体操作请参见上传与使用自定义连接器

  4. 实时计算清洗数据。

    进入实时计算控制台,使用实时计算清洗并聚合源数据,通过实时数据API将数据实时写入Hologres。具体操作请参见SQL作业开发,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' = '<holo_db>',
    'tablename' = '<receive_table>',
    'username' = '<uid>',
    'password' = '<pid>',
    'endpoint' = '<host>'
     );
    
    INSERT INTO hologres_sink
    SELECT user_id,
     user_name,
     item_id,
     item_name,
     price,
     province,
     city,
     longitude,
     latitude,
     ip,
     sale_timestamp
    FROM
    source_table;

    参数说明如下:

    参数名

    描述

    holo_db

    Hologres的数据库名。

    receive_table

    Hologres接收数据的表名,本文中为public.order_details

    uid

    当前云账号的AccessKey ID。

    pid

    当前云账号的AccessKey Secret。

    host

    Hologres实例指定VPC网络的域名。您可以进入Hologres管理控制台的实例详情页,从网络信息中获取域名。

  5. 前往实时计算的作业运维页面启动作业至运行阶段,详情请参见作业启动image

  6. 在Hologres中实时查询数据。

    根据业务情况,在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" FROM order_details GROUP BY "日期" ORDER BY "GMV" DESC limit 100;                
  7. 展示DataV实时大屏。

    Hologres中查询出的数据直接对接DataV,用于制作实时大屏。操作步骤如下:

    1. 添加数据源。

      1. 进入DataV控制台首页,在左侧导航栏单击数据准备 > 数据源,在数据源页面单击新建数据源

      2. 添加数据源面板中配置Hologres数据源的相关参数,参数详情请参见添加实时数仓Hologres数据源

      3. 单击确定

    2. 创建实时大屏。

      根据大屏需要显示的内容,选择相应组件并配置数据源信息。详情请参见概述

      本试验中选择了基本柱状、轮播、基础平面地图和数字翻牌器。以配置数字翻牌器示例。

      1. 配置数据源信息。如下图所示。y

      2. 配置数字翻牌器的边框、字体和颜色。数字翻牌器

    3. 展示实时大屏。

      配置大屏的插件参数及数据源信息后,可根据实际业务添加装饰元素,美化插件。

      • 左侧实时显示商品的访问量以及城市的销售额。

      • 中间地图实时显示每一笔交易订单的位置、总的销售额以及总访问次数。

      • 右侧实时显示商品的销售额占比和商品的销售排行。