本文为您介绍在Hologres中如何使用实时数据API写入数据至分区表父表。

前提条件

  • 开通Hologres并连接开发工具,详情请参见HoloWeb快速入门
  • 开通实时计算Flink版,详情请参见开通服务和创建项目
  • 开通Hologres实时数据API,您可以通过提交工单申请开通。
    说明
    • 请确保开通的实时计算与Hologres地域一致,以免连接失败。
    • Blink 3.6之前的版本未内置Hologres Connector,实时写入数据至Hologres需要引用JAR文件,您可以提交工单或通过交互式分析Hologres交流群(钉钉群号:32314975)获取。

背景信息

Hologres与大数据生态无缝连通,支持实时写入实时数据。在实时数仓场景,最常用的链路是将实时采集的数据经过实时计算初步过滤,再写入Hologres,最后进行实时查询。

但Hologres不支持将数据直接写入分区父表中,仅支持将数据写入对应的分区子表中。在实际业务场景中,如果分区数量过多,则需要每个分区一一对应后再写入数据,该操作比较繁琐,并且容易出错,不利于开展业务。

为解决上述问题,Hologres支持实时数据API接口,通过调用实时数据API接口直接将数据写入分区父表中,对应的分区数据将会自动路由至分区子表,您可以像往普通表写入数据一样写入至分区表,实时数据API详情请参见实时数据API

使用限制

  • Hologres仅支持List分区。
  • 创建分区表时,需要显示指定分区列,分区列的类型仅支持TEXTINT4
  • 如果设定了主键,分区列必须为主键的一部分。
  • 创建分区子表时,子表分区列的值必须为固定值。
  • 写入分区子表的数据对应的分区列值必须严格匹配子表创建时定义的值,否则会报错。
  • 目前不支持默认分区功能。
  • Hologres暂不支持自动创建分区表,在写入数据至分区表前,您需要在Hologres中手动创建对应的分区表子表。

操作步骤

  1. Hologres创建分区表。
    在Hologres中创建一张用于接收实时写入数据的分区表及对应的分区子表,示例SQL语句如下。
    //创建分区父表test_message,及对应的分区子表。
    
    drop table if exists test_message;
    
    begin;
    create table test_message (
     "bizdate" text NOT NULL,
     "tag" text NOT NULL,
     "id" int4 NOT NULL,
     "title" text NOT NULL,
     "body" text,
    PRIMARY KEY (bizdate,tag,id)
    )
    PARTITION BY LIST (bizdate);
    commit;
    
    create table test_message_${bizdate} partition of test_message for values in ('${bizdate}');
    commit;
    说明 ${bizdate}为参数名称,执行命令时,请替换为实际值。
  2. 实时计算创建并启动作业。
    实时计算创建作业并通过调用实时数据API接口,将数据实时写入Hologres。操作步骤如下:
    1. 获取Endpoint。
      在Hologres 0.6版本中,执行以下命令获取VPC的Endpoint。
      select * from hg_get_hub_endpoints();
      在Hologres 0.7版本中,执行以下命令获取VPC的Endpoint。
      show hg_datahub_endpoints;
    2. 新建作业。
      登录实时计算控制台,并在实时计算页面新建作业,详情请参见开发。示例创建作业的SQL语句如下。
      create table test_message_src(
        tag VARCHAR,
        id INTEGER,
        title VARCHAR,
        body VARCHAR
      ) with (
        type = 'random',
        `interval` = '10',
        `count` = '100'
      );
      
      create table test_message_sink (
        bizdate VARCHAR,
        tag VARCHAR,
        id INTEGER,
        title VARCHAR,
        body VARCHAR
      ) with (
        type = 'hologres',
        `endpoint` = '$ip:$port',  //Hologres的vpc网络地址以及端口号。
        `username` = '当前交互式分析账号的AccessKey ID',
        `password` = '当前交互式分析账号的AccessKey Secret',
        `dbName` = '当前交互式分析的数据库名称',
        `tableName` = 'blink_test'  //当前交互式分析接受数据的表名称。
      );
      
      insert into test_message_sink select '20200327', * from test_message_src;
      注意 Blink 3.6之前的版本未内置Hologres Connector,实时写入数据至Hologres需要引用JAR文件,您需要提交工单或通过交互式分析Hologres交流群(钉钉群号:32314975)获取,并修改Sink表如下参数:
      • 配置type参数为Custom
      • type后新增参数tableFactoryClass = 'com.alibaba.blink.connectors.hologres.table.factory.HologresTableFactory'
    3. 上线作业。
      1. 完成新建作业后,单击编辑框的语法检查,如果显示成功,则表明语法正确。
      2. 单击保存保存作业。
      3. 单击上线,提交作业至生产环境。根据业务情况填写作业的上线配置。4
    4. 启动作业。
      提交作业至生产环境后,您需要手动启动作业。
      阿里实时计算开发平台页面顶部菜单栏右侧,单击运维,跳转至运维界面,选择需要启动的作业,单击右上角的启动6
  3. Hologres实时查询数据。
    在Hologres中,直接查询用于接收数据的表,就能实时查询到写入的数据,示例查询SQL语句如下。
    select * from test_message;
    select * from test_message where bizdate = '20200327';
    744