在 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 数据。
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