RisingWave Feature|针对 PostgreSQL source 的 Auto schema change

185 阅读3分钟

在 PostgreSQL 表中进行 Schema change ,如增加或删除列、修改数据类型,通常会给开发人员、数据工程师增加不少工作量。这些变更可能会破坏现有的工作流程,引发兼容性问题,导致流程中断,进而延误开发进度、影响新功能的交付。如果没有合适的工具或自动化支持,手动处理 Schema change 既麻烦又低效。

因此,我们在 RisingWave 2.1 版本中推出了针对 PostgreSQL source 的 Auto schema change,专门用于处理从 PostgreSQL 获取 CDC 数据时的 Schema 更新,从而让 RisingWave 表与 Source PostgreSQL 表的 Schema change 保持同步。借助这一功能可以减少手动维护数据 Pipeline 的时间,把精力更多地投入到其他操作中。下面将为大家分享如何使用这一功能。

1. 获取 Premium Edition 许可证

PostgreSQL CDC 的 Auto schema change 是 RisingWave Premium 特有功能,需要购买许可证以使用。想了解更多 RisingWave Premium 的内容,请查看 《RisingWave Premium 常见问题解答》

启动 RisingWave 后,可以通过运行以下 SQL 查询来检查实例是否已正确配置许可证密钥。如果许可证密钥配置无误且有效,查询结果将返回 t。有关如何设置许可证密钥的详细信息,请查看 《 RisingWave Premium 文档》

SELECT rw_test_paid_tier();

2. 配置 PostgreSQL CDC source

要启用 Auto schema change 功能,需要在创建 PostgreSQL CDC source 时,将 auto.schema.change 参数设置为 true。该参数是创建数据源时的一个可选项,仅在 RisingWave Premium 版可用。

接着从 PostgreSQL 表中获取数据,以下为代码示例:

CREATE SOURCE pg_mydb WITH (
    connector = 'postgres-cdc',
    hostname = 'localhost',
    port = '5432',
    username = 'myuser',
    password = '123456',
    database.name = 'mydb',
    auto.schema.change = 'true'
);

有关获取数据的更多示例,请参见官方文档

3. Demo

接下来,我们将通过 Demo 详细展示 PostgreSQL Auto Schema Change 的流程。

3.1 在 PostgreSQL 中创建表

假设 PostgreSQL 数据库中已经有一个表,名为 pg_names :

 id |  name
----+---------
  1 | Alice
  3 | Charlie
  2 | Bob

接着需要将该表的数据导入到 RisingWave 。

3.2 创建 PostgreSQL CDC source

启动 RisingWave 实例并配置好高级版的许可证密钥。有关如何快速部署 RisingWave 的不同方式,可以参考我们的快速入门指南

要从 PostgreSQL 表中读取数据,首先需要创建 Source,然后再创建表。Source 将连接到 PostgreSQL 数据库;表则会从指定的 PostgreSQL 表中导入数据。这个过程能够轻松地从多个表中导入 CDC 数据。

截屏2025-01-28 上午9.46.21.png 截屏2025-01-28 上午9.46.47.png

3.3 查看 Schema change

您可以通过修改 PostgreSQL 表的 Schema 来测试该功能。例如,向 PostgreSQL 表中添加一个新列:

ALTER TABLE simple_table
ADD COLUMN age INT DEFAULT 0;

然后从 RisingWave 表中查询数据,新增列将自动呈现:

SELECT * FROM names;
---
 id |  name   | age
----+---------+-----
  2 | Bob     |   0
  1 | Alice   |   0
  3 | Charlie |   0
(3 rows)

同样地,如果在 PostgreSQL 中删除某列,RisingWave 表也会同步删除该列。

4. 总结

通过 Auto Schema Change,RisingWave 彻底解决了手动处理 Schema change 所带来的繁琐问题,数据团队能够更加高效地管理 RisingWave 中的流数据,也无需再费心修改所依赖的工作流或处理数据管道中断等问题。

5. 关于 RisingWave

RisingWave 是一款开源的分布式流处理数据库,旨在帮助用户降低实时应用的开发成本。RisingWave 采用存算分离架构,提供 Postgres-style 使用体验,具备比 Flink 高出 10 倍的性能以及更低的成本。

👨‍🔬加入 RW 社区,欢迎关注公众号:RisingWave中文开源社区

🧑‍💻想要了解和探索 RisingWave,欢迎浏览我们的官网:risingwave.com/

🔧快速上手 RisingWave,欢迎体验入门教程:github.com/risingwave

💻深入理解使用 RisingWave,欢迎阅读用户文档:zh-cn.risingwave.com/docs