使用Hologres动态表

更新时间:
复制为 MD 格式

Hologres动态表(Dynamic Table)是实现数据自动增量更新、加速查询的强大引擎。DataWorks通过其数据目录功能,为Hologres动态表提供一套直观、强大的可视化管理界面。您无需手写复杂的DDL,即可在DataWorks中完成动态表的创建、配置、监控和运维,轻松构建实时、准实时的数据应用。

使用限制

  • 创建Hologres实例时需选择Hologres V3.1及以上版本

  • 关于Hologres动态表本身在SQL查询、函数支持等方面的详细限制,请参见Hologres官方文档:Dynamic Table支持范围和限制

准备工作

快速入门:创建自动刷新动态表

本示例将引导您创建一个非分区动态表,该表会自动、增量地聚合源表 orders 的订单数据,并保持数据在5分钟内自动刷新。

步骤一:数据准备

在开始之前,在Hologres数据库中准备一张源表。为了实现增量刷新,源表需要开启Binlog。在DataWorksHologres SQL节点或任何Hologres客户端中执行以下SQL,创建一张订单表 orders

-- 创建源表,并开启Binlog以支持增量刷新
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    user_name TEXT,
    price FLOAT,
    order_time TIMESTAMPTZ
) WITH (
    binlog_level = 'replica', -- 关键:开启Binlog
    binlog_ttl = '86400'      -- Binlog保留时长,单位秒,例如一天
);

-- 插入一些初始数据
INSERT INTO orders VALUES 
(1, 101, 'Alice', 99.9, NOW()),
(2, 102, 'Bob', 19.5, NOW()),
(3, 101, 'Alice', 25.0, NOW());

步骤二:进入动态表创建向导

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的快速进入 > Data Studio,进入Data Studio。

  2. 在左侧导航栏单击image,进入数据目录模块。

  3. 数据目录区域的Hologres类型下找到目标Hologres实例,依次展开目录,单击动态表右侧的image图标,进入新建动态表页面。

    说明
    • 如果您使用的是标准模式工作空间,在Hologres数据目录下会看到开发生产两个数据库实例。建议您先在开发环境的数据库中测试新建Hologres动态表,确认无误后再于生产环境中创建。

    • 在标准模式工作空间中,您在Hologres开发环境数据库中创建的动态表不会自动同步到生产环境数据库中。若要在生产环境数据库中查询使用这些表,您需要在生产环境数据库内单独创建Hologres动态表。

步骤三:定义查询逻辑并预编译(关键步骤)

进入动态表创建页面之后,填写查询逻辑并编译。

  1. 填写基础信息

    • 动态表名称:输入一个唯一的表名,例如 dt_user_orders_agg

    • 描述:填写表的用途,例如“按用户聚合的订单统计”。

  2. 编写数据生成SQL:在字段信息区域的数据生成SQL页签中,编写定义动态表数据逻辑的SELECT查询。

    重要

    此处只需填写SELECT语句本身,无需包含CREATE DYNAMIC TABLEDDL命令。DDL完整语句系统将根据配置项自动解析并在右侧DDL处完整展示。

    SELECT 
        user_id,
        user_name,
        COUNT(*) AS order_count,
        SUM(price) AS total_price
    FROM public.orders
    GROUP BY user_id, user_name;
  3. 执行预编译

    编写完成后,单击SQL编辑器上方的预编译按钮。预编译是一个核心功能,它会实时与Hologres引擎交互,完成以下任务:

    • 校验语法:检查您的SELECT语句是否符合SQL规范。

    • 推断刷新模式:分析查询逻辑和源表属性,判断支持哪些刷新模式(自动、增量、全量)。

    • 解析字段:如果语法正确,自动解析出动态表的输出字段、数据类型等。

    预编译结果反馈

    • 成功:系统会提示“语法正确”并列出支持的刷新模式。您可以继续后续配置。

    • 失败:如果SQL有误或逻辑不满足动态表要求,系统会明确提示错误原因。请根据提示修改SQL后,再次预编译。

  4. (可选)查看并编辑字段详情

    • 预编译成功后,您可以单击字段详情页签。

    • 在这里,您可以查看系统解析出的所有字段、类型和非空属性,并可以在描述列为每个字段添加注释,以提高元数据可读性。

      image

此处无需关注分区配置和高级参数配置。参数说明,请参见附录:配置项说明

步骤四:配置数据刷新策略

预编译成功后,页面右侧的刷新策略面板将变为可配置状态。

说明

更多参数解释,更参考Hologres刷新模式与资源

  1. 基础参数

    • 表类型:由于未选择分区字段,系统自动识别为非分区表

    • 刷新策略:选择增量刷新,以实现低延迟的数据同步。

    • 刷新触发方式:选择Hologres自动刷新

    • 是否自动刷新数据:保持默认的

    • 数据新鲜度:设置为 5 分钟。此参数定义数据的最大延迟时间。系统会根据数据流入情况动态触发刷新,以确保动态表的数据相比源表的延迟始终在 5 分钟以内。

    • 增量刷新消费基表方式:选择stream。这是推荐的低延迟流式消费方式。

    • Hologres计算资源:选择 Serverless资源。这可以避免刷新任务占用您宝贵的实例自有资源,实现资源隔离。

  2. 高级参数(可选):此部分用于设置特殊的GUC参数,一般保持默认即可。详情请参见GUC参数

步骤五:发布

  1. 确认所有配置无误后,单击页面顶部的发布按钮。

  2. 在弹出的确认对话框中,再次单击发布

恭喜!您已成功创建并发布了一个Hologres动态表。现在,当源表 orders 有新数据插入或更新时,动态表 dt_user_orders_agg 会在约5分钟内自动更新其聚合结果。

进阶示例:创建按天分区动态表

本示例将引导您创建一个分区动态表。该表将从一个用户注册表中,按天聚合每日的新增用户,并自动创建和管理分区。

步骤一:数据准备

首先,我们需要一个记录用户注册信息的源表 users。这张表需要包含一个时间戳字段作为分区依据,并同样开启Binlog。

-- 创建用户注册表,并开启Binlog
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    user_name TEXT,
    region TEXT,
    registration_time TIMESTAMPTZ  -- 用户注册时间,TIMESTAMPTZ类型
) WITH (
    binlog_level = 'replica',
    binlog_ttl = '86400'
);

-- 插入一些测试数据,请将日期替换为当前业务日期
INSERT INTO users VALUES 
(1, 'Alice', 'CN-Hangzhou', '2026-02-27 10:00:00+08'),
(2, 'Bob', 'CN-Shanghai', '2026-02-27 14:30:00+08'),
(3, 'Charlie', 'CN-Beijing', (NOW() - INTERVAL '1 day')::TIMESTAMPTZ);

步骤二:进入动态表创建向导

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的快速进入 > Data Studio,进入Data Studio。

  2. 在左侧导航栏单击image,进入数据目录模块。

  3. 数据目录区域的Hologres类型下找到目标Hologres实例,依次展开目录,单击动态表右侧的image图标,进入新建动态表页面。

步骤三:定义查询逻辑并预编译

  1. 填写基础信息

    • 动态表名称dwd_user_new_user_detail_di

    • 描述:每日新增用户明细统计

  2. 编写数据生成SQL

    编写一个SQL,它会从 users 表中提取所有用户记录。不需要在WHERE子句中手动过滤时间,动态表的分区机制会自动处理。

    SELECT 
        user_id,
        user_name,
        region,
        registration_time, -- 原始的精确时间字段可以保留,方便查询
        CAST(registration_time AS DATE) AS ds -- 【核心】将时间戳转换为DATE类型,作为分区键
    FROM public.users;
  3. 执行预编译:单击预编译按钮。成功后,系统会解析出字段信息。

步骤四:选择分区字段(关键步骤)

这是创建分区表的关键一步。

  • 分区字段信息区域,单击分区字的下拉框。

  • 选择新字段 ds 作为分区字段。

选择分区字段后,DataWorks会自动识别此表为分区表,并展示出分区相关的配置项。

步骤五:配置分区和刷新策略

说明

更多参数解释,更参考Hologres分区属性

  1. 分区配置

    • 分区属性:自动显示为逻辑分区

    • 分区格式:选择 yyyy-mm-dd。这个格式现在与我们分区键dsDATE类型)的格式完全匹配。

    • 分区刷新范围: 设置为 7 day

    • 分区管理 > 分区到期时长 : 设置为 30 day

  2. 刷新策略配置

    • 刷新策略:选择 自动刷新

    • 刷新触发方式:选择Hologres自动刷新

    • 数据新鲜度:设置为 10 minute

    • Hologres计算资源:选择Serverless资源

步骤六:发布

单击页面顶部的发布按钮。

后续操作与验证

  1. 查看分区:发布成功后,展开 dwd_user_new_user_detail_di 表,您会看到根据日期(如 2026-02-27)创建的分区子表。

  2. 验证数据

    • 创建一个Hologres SQL节点,向users表插入当天的新数据:

      INSERT INTO users VALUES (4, 'David', 'CN-Shenzhen', '2026-02-27 18:00:00+08');
    • 等待约10分钟后,使用新的分区键ds进行查询,效率更高:

      -- 高效查询方式:直接对分区键进行过滤
      -- 若需马上验证,可手动刷新 REFRESH DYNAMIC TABLE dwd_user_new_user_detail_di PARTITION (ds = '2026-02-27');
      SELECT * FROM dwd_user_new_user_detail_di WHERE ds = '2026-02-27';

      您会看到新用户'David'已成功进入了当天的分区。

      image

查看、监控与管理动态表

动态表是“活”的,对其运行状态的监控至关重要。

  1. 导航至详情页:在数据目录的动态表列表中,单击刚刚创建的 dt_user_orders_agg 表。

  2. 查看静态信息

    • 明细信息:查看表的字段列表、类型、主键等 schema 信息。

    • 基础信息:回顾表的核心配置,如负责人、数据刷新逻辑(SQL)和刷新策略。

    • DDL:查看并复制代码以创建该动态表的完整DDL语句,方便迁移或复现。

  3. 监控产出信息(核心运维页面)

    切换到产出信息页签,这是监控动态表运行状况的关键页面。

    • 操作按钮

      • Full:将动态表的刷新模式永久修改为全量刷新,并停止自动刷新。仅在自动增量刷新模式下可见。

      • 暂停刷新 / 恢复刷新:临时停止或恢复Hologres的自动刷新。

      • 手动刷新:手动触发一次刷新任务,立即更新数据。

    • 数据刷新中:如果当前有刷新任务正在执行,这里会显示该任务的实时信息,如PID、Query ID、状态、运行时长等。

    • 产出历史:记录了每一次刷新任务的历史,是排查问题的金矿。

      • Query ID: 历史刷新任务的唯一ID,可用于在Hologres中进行深度问题排查。

      • 刷新模式增量刷新(Incremental)等。

      • 状态: 任务最终状态(成功/失败)。

      • 运行时长(秒): 任务总耗时。

      • 数据消费延迟(秒): (仅增量)衡量动态表数据处理的延迟。

      • 计算资源...: 记录任务消耗的资源情况,用于成本分析和性能优化。

修改与删除动态表

  • 修改动态表:在数据目录中找到动态表,单击详情页右上角的编辑按钮即可进入编辑页面。大部分配置项都支持修改。关于具体哪些参数支持修改,请参考Hologres官方文档:ALTER DYNAMIC TABLE

  • 删除动态表:在数据目录的动态表列表中,右键单击目标表,选择删除

附录:配置项说明

1. 基础信息、字段信息、分区字段

  • 字段信息 (SQL):定义动态表数据来源的SELECT查询,预编译是必须步骤。

  • 分区字段

    • 不选择:创建非分区表

    • 选择一个时间/日期类型字段:创建分区表,系统将自动切换到分区表配置模式。

2. 数据刷新配置(核心)

通用配置
  • 刷新策略

    • 自动刷新(推荐) Hologres自动决定采用增量或全量方式刷新,兼顾性能和易用性。

    • 增量刷新:强制只进行增量刷新。适用于对数据新鲜度要求高的场景。

    • 全量刷新:每次刷新都完整地重新计算。适用于源表无主键、无Binlog,或查询逻辑复杂的场景。

刷新触发方式

当前仅支持Hologres自动刷新

  • 是否自动刷新数据: 总开关。

  • 数据新鲜度: 定义数据的最大可接受延迟,是自动刷新的核心触发依据。

  • 增量刷新消费基表方式: 定义消费Binlog的方式,stream(流式)为默认推荐。

  • Hologres计算资源

    • Serverless资源(推荐) 使用Hologres Serverless资源执行刷新,不占用实例自身计算资源,实现资源隔离。

    • 本实例资源 (local): 使用实例自身的计算资源。若实例为计算组形态(V4.0+),可选择具体计算组。

3. 分区配置(仅分区表可见)

当您选择分区字段后,会增加以下配置项。新版动态表均为逻辑分区

  • 分区格式(必填) 定义如何根据分区字段的值生成分区。例如,字段类型为TIMESTAMPTZ,格式选择yyyy-mm-dd,则会按天创建分区。

  • 分区刷新范围: 定义自动刷新的活跃分区范围。例如“最近7天”,则Hologres仅自动刷新最近7天的分区,更早的分区将不再自动刷新,以节省资源。

  • 分区管理(默认折叠):

    • 分区到期时长: 设置分区的生命周期(TTL),到期的分区将被自动删除。

    • 分区数据保持热存时长: 结合冷热分层存储,定义分区数据在热存储(SSD)中保留的时间。

4. 高级设置(表属性)

这些是应用于动态表自身的物理属性,与Hologres普通表设置类似。

参数

参数描述

存储模式

Hologres支持列存行存行列共存三种存储模式。默认为列存。详情请参见表存储格式:列存、行存、行列共存

  • 列存适合各种OLAP场景的复杂查询。

  • 行存适用于基于主键(PK)的KV查询场景。

  • 行列共存则同时适用列存和行存的场景。

Table Group

选择您在Hologres数据源中创建内部表生成的Table Group名称,详情请参见Table Group管理

存储策略

Hologres的数据存储类型分为标准存储(热存储)、低频访问存储(冷存储)两种存储策略。

  • 热存储即全SSD热存储,是Hologres的默认存储,满足低延时、高性能访问数据需求,对于大多数使用场景而言,标准存储是最有效且最具成本效益的选择。

  • 冷存储即全HDD冷存,满足低频访问数据的低成本存储需求,适用于对延迟不敏感或不常访问的超大型数据集。

详情请参见数据分层存储

表数据生命周期

您可在此处自定义动态表的最大数据生命周期。

Binlog

您可在此处选择开启(replica)或关闭(none)订阅Hologres Binlog日志信息,默认关闭。详情请参见订阅Hologres Binlog

Binlog 生命周期

当您选择开启(replica)订阅Hologres Binlog日志信息后,才能在此设置Hologres Binlog日志信息存储的最大生命周期,详情请参见订阅Hologres Binlog

字段属性

字段属性设置,主要包含对字段名对应的分布列分段列聚簇列位图列字典编码列进行选择设置。您可根据页面说明进行选择设置,详情请参见管理内部表