阿里云云原生数据仓库 AnalyticDB PostgreSQL 版对接使用全攻略
1. 认识云原生数据仓库 AnalyticDB PostgreSQL 版
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版是一款经过超大规模和核心业务验证的 PB 级实时数据仓库,高度兼容 PostgreSQL 语法生态,支持云原生存算分离架构部署模式。它采用大规模并行处理架构,具备完整的交易处理、高吞吐写入和流批一体引擎,通过全自研计算引擎及行列混合存储提供高性能数据分析和在线分析能力。同时,AnalyticDB PostgreSQL 版在数仓中内置 AI 能力,提供向量检索、一站式 RAG 服务,帮助企业快速构建 Data+AI 新范式。
在架构层面,AnalyticDB PostgreSQL 版提供两种产品形态:存储弹性模式和 Serverless Pro 模式。存储弹性模式基于 ECS+ESSD 云盘的 Shared-Nothing 架构,采用 MPP 架构设计,支持计算节点垂直升降配和存储横向扩容。实例包含一个协调节点(Master 节点)和多个工作节点(Segment 节点),协调节点负责集群的元数据管理、负载均衡,工作节点负责数据处理。Serverless Pro 模式则是基于全新存算分离架构,深度融合自主研发的计算与存储引擎,完全解耦计算与存储,解决了计算存储必须等比例缩放的问题。相较上一代 Serverless 模式,Serverless Pro 整体性能提升约 2 倍。
在功能特性方面,该产品兼容 ANSI SQL 2003,部分兼容 Oracle 语法,支持 PL/SQL 存储过程。通过 PostGIS 插件支持地理信息数据分析,MADlib 库内置超过 300 个机器学习算法库。它还支持通过 DTS、DataWorks 等工具实现多种数据源的实时同步与批量导入,支持高并发访问 OSS 构建数据湖分析。
需要先登录阿里云控制台,点击:阿里云控制台
2. 实例创建与准备工作
2.1 创建实例
使用 AnalyticDB PostgreSQL 版的第一步是创建实例。登录云原生数据仓库 AnalyticDB PostgreSQL 版控制台,单击页面右上角的“新建实例”进入购买页面。如果是首次使用,系统会提示授权创建服务关联角色。
在实例购买页面,需要配置以下核心参数:
- 商品类型:包年包月适合长期稳定需求,价格更实惠;按量付费适合短期测试场景,按小时扣费。
- 地域和可用区:建议与需要连接的 ECS 实例部署在同一地域,以实现内网互通。
- 实例资源类型:存储弹性模式支持独立磁盘扩容和在线平滑扩容;Serverless Pro 模式只需指定计算资源,无需预留存储资源。
- 引擎版本:推荐选择 7.0 标准版,以获得更丰富的功能体验。
- 实例系列:高性能(基础版)适用于大部分业务分析场景;高可用版建议企业核心业务采用。
- 专用网络与虚拟交换机:选择与业务 ECS 相同的 VPC 和交换机,确保内网互通。
阿里云提供存储弹性模式实例的免费试用活动,新用户可以访问阿里云免费试用页面申请试用资格。
2.2 网络配置与白名单
实例创建完成后,需要配置白名单以确保客户端能够正常连接。将客户端的 IP 地址或网段添加到实例的白名单中。如果客户端部署在与 AnalyticDB PostgreSQL 版实例同一地域且网络类型相同的 ECS 上,可以使用内网地址进行连接。如果客户端部署在不同地域或阿里云以外的系统上,则需要申请外网地址。
查看连接地址的方法:登录控制台,单击目标实例 ID 进入实例详情页,在左侧导航栏单击“基本信息”,在数据库连接信息区域即可查看内网地址。
3. 数据库连接与 SQL 开发
3.1 JDBC 连接
AnalyticDB PostgreSQL 版支持使用 PostgreSQL 官方的 JDBC 驱动包进行连接。需要注意的是,7.0 版本要求 JDBC V42.2.0 及以上版本。
以下是一个完整的 JDBC 连接示例,用于连接 AnalyticDB PostgreSQL 版实例并查询节点配置信息:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ADBPGConnection {
public static void main(String[] args) {
try {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://mygpdbpub.gpdb.rds.aliyuncs.com:5432/postgres";
String username = "myusername";
String password = "mypassword";
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM gp_segment_configuration;");
while (rs.next()) {
System.out.print(rs.getString(1) + " | ");
System.out.print(rs.getString(2) + " | ");
System.out.println(rs.getString(3));
}
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}在实际生产环境中,建议使用连接池(如 HikariCP、Druid)来管理 JDBC 连接,避免频繁创建和销毁连接带来的性能开销。
3.2 建表与基础 SQL
AnalyticDB PostgreSQL 版兼容标准 PostgreSQL 的 DDL 语法。以下是一个典型的建表示例:
CREATE TABLE test_adbpg_table (
id INT PRIMARY KEY,
name TEXT,
created_at TIMESTAMP DEFAULT NOW()
);在 MPP 架构下,数据会均匀分布在各个计算节点上。建表时可以通过 DISTRIBUTED BY 子句指定分布键,以优化数据分布和查询性能。
CREATE TABLE orders (
order_id BIGINT,
user_id INT,
amount DECIMAL(10,2),
status VARCHAR(20),
created_at TIMESTAMP
) DISTRIBUTED BY (order_id);4. 数据写入方式详解
AnalyticDB PostgreSQL 版提供多种数据写入和加载方式,包括 INSERT 语句、COPY 命令、OSS 外表的并行写入和使用 Client SDK 写入四种方式。不同方式在写入性能和使用场景上各有侧重。
4.1 INSERT 语句
通过 INSERT 语句写入数据是最直接的方式。为提升写入速度,建议单条 INSERT 语句拼装多个 VALUE 执行:
INSERT INTO performers (name, specialty) VALUES
('Sinatra', 'Singer'),
('Presley', 'Singer'),
('Hendrix', 'Guitarist');INSERT 方式每秒约支持 3 MB 的数据写入量。执行高吞吐写入时,建议在会话级别关闭 ORCA 优化器,因为 ORCA 适合复杂查询优化,但对简单 INSERT 语句会带来不必要的解析和优化开销:
SET optimizer = off;4.2 COPY 命令
COPY 命令可以将本地格式化的文本文件数据导入 AnalyticDB PostgreSQL 版。文本文件要求是格式化的,如通过逗号、分号等作为分隔符。COPY 方式的写入性能优于 INSERT,每秒可达 30 MB。
\COPY orders FROM '/data/orders.csv' DELIMITER ',' CSV HEADER;JDBC 中也封装了 CopyIn 方法,支持通过编程方式执行 COPY 操作。
4.3 OSS 外表导入导出
通过 OSS 外表,数据可以从各个 Segment 节点并行写入或导出,整体速度随节点数线性扩展,单节点每秒支持 30 MB 的数据写入。这种方式非常适合将 OSS 中的海量数据快速加载到数据仓库中。
CREATE EXTERNAL TABLE oss_import (
id INT,
name TEXT,
value FLOAT8
) LOCATION ('oss://endpoint/bucket/path/')
FORMAT 'CSV' (DELIMITER ',');
INSERT INTO target_table SELECT * FROM oss_import;4.4 Client SDK 高效写入
Client SDK 通过 API 形式提供高性能写入能力,支持用户定制化开发或对接写入程序。通过 SDK 开发写入程序,可简化写入流程,无需担心连接池、缓存等问题,相比直接 COPY 或 INSERT 写入,通过并行化等内部机制有几倍性能提升。
Client SDK 的主要功能是高效写入用户提供的数据,不负责读取或处理原始数据。
5. 生态对接与数据集成
5.1 实时计算 Flink 版集成
AnalyticDB PostgreSQL 版提供了与阿里云实时计算 Flink 版的原生集成能力。通过 AnalyticDB PostgreSQL Connector,可以在 Flink SQL 作业中将 AnalyticDB PostgreSQL 版作为维表、结果表或源表(Beta)使用。
使用 Flink 集成时需注意以下限制:
- 暂不支持 Serverless 模式实例
- 需要 Flink 实时计算引擎 VVR 6.0.0 及以上版本
- AnalyticDB PostgreSQL 版 7.0 版本需要 VVR 8.0.1 及以上版本
- 实例和 Flink 全托管工作空间需位于同一 VPC 下
配置步骤简述:
- 将 Flink 工作空间所属的网段加入 AnalyticDB PostgreSQL 版的白名单
- 在 AnalyticDB PostgreSQL 版实例上创建目标表
- 上传自定义连接器 JAR 包(从官方 GitHub 仓库获取)
- 在 Flink 控制台创建 SQL 作业并配置连接器参数
以下是一个 Flink SQL 中定义 AnalyticDB PostgreSQL 版维表的示例:
CREATE TEMPORARY TABLE user_dim (
user_id INT,
user_name STRING,
user_level STRING,
PRIMARY KEY (user_id) NOT ENFORCED
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://mygpdbpub.gpdb.rds.aliyuncs.com:5432/postgres',
'table-name' = 'users',
'username' = 'myusername',
'password' = 'mypassword'
);5.2 DataWorks 数据开发平台集成
DataWorks 是阿里云的一站式数据开发与治理平台,与 AnalyticDB PostgreSQL 版有着深度集成。通过 DataWorks,可以实现以下能力:
- 将 AnalyticDB PostgreSQL 版作为数据源,进行数据同步任务开发(导入和导出)
- 创建 AnalyticDB PostgreSQL 版节点,进行 SQL 任务的开发和周期性调度
- 通过数据目录统一管理实例元数据
使用 DataWorks 集成时,需要先在 DataWorks 上创建 AnalyticDB for PostgreSQL 数据源,配置连接信息并测试连通性。
5.3 Spark 数据分析引擎集成
AnalyticDB PostgreSQL 版支持与 Spark 生态对接,可以通过 Spark SQL 读取和写入数据。同时,AnalyticDB 支持从多种开源数据平台进行数据接入,包括 Apache Flink、Apache Hudi、Apache Iceberg、Apache Kafka、Apache Spark 和 Presto 等。
6. 查询性能优化
6.1 统计信息收集
查询优化器生成执行计划依赖于表的统计信息。过期或缺失的统计信息会导致优化器做出错误的估算,生成低效的执行计划。在大批量数据加载或表中超过 20% 的行被更新后,应执行 ANALYZE 收集统计信息:
-- 收集所有表的统计信息
ANALYZE;
-- 收集指定表所有列的统计信息
ANALYZE orders;
-- 收集指定列的统计信息
ANALYZE orders(user_id);对于大多数工作负载,对修改过的表执行 ANALYZE 就足够了。只有在需要更精细控制时(如连接键、过滤条件列或索引列)才使用列级 ANALYZE。
6.2 双优化器选型
AnalyticDB PostgreSQL 版包含两种查询优化器:Legacy 优化器和 ORCA 查询优化器。两者适用场景不同:
- Legacy 优化器:适合高并发简单查询、3 表以内的 JOIN、INSERT/UPDATE/DELETE 工作负载
- ORCA 优化器:适合复杂查询、3 表以上的 JOIN、ETL 和报表工作负载、包含子查询的 SQL、带参数化过滤条件的分区表查询
可以在会话级别切换优化器:
-- 启用 Legacy 优化器
SET optimizer = off;
-- 启用 ORCA 优化器
SET optimizer = on;
-- 查看当前优化器
SHOW optimizer;6.3 索引策略
在 AnalyticDB PostgreSQL 版中,索引的使用策略与传统 TP 数据库有所不同。首先应该尝试在没有增加任何索引的情况下执行查询。索引通常更适合 TP 场景,适用于只返回一条记录或极少量数据集的查询。在大部分场景下,AnalyticDB PostgreSQL 版更适合快速的顺序扫描,或结合稀疏索引来减少数据 I/O 操作。
当需要创建索引时,应在 WHERE 条件中频繁使用的列上创建索引:
CREATE INDEX idx_orders_status ON orders(status);
-- 现在查询可以使用索引而非全表扫描
SELECT * FROM orders WHERE status = 'pending';B-tree 索引(默认类型)仅支持 =、<、<=、>、>= 和 BETWEEN 操作符。!= 和 <> 操作符无法使用 B-tree 索引。
-- 此查询无法使用 B-tree 索引
SELECT * FROM orders WHERE status != 'cancelled';
-- 改用 IN 列表或范围条件
SELECT * FROM orders WHERE status IN ('pending', 'processing', 'on_hold');避免在 WHERE 子句中对列使用函数或复杂表达式,这会阻止优化器准确估算行数:
-- 避免:对列使用函数
SELECT * FROM orders WHERE DATE(created_at) = '2024-01-15';
-- 更好:使用范围条件
SELECT * FROM orders WHERE created_at >= '2024-01-15 00:00:00'
AND created_at < '2024-01-16 00:00:00';6.4 慢查询诊断
AnalyticDB PostgreSQL 版会自动记录慢查询。可以通过查询两个内置视图来进行性能诊断:
- qmonitor.instance_slow_queries:实例级别分析
- qmonitor.host_slow_queries:节点级别分析
默认情况下,所有执行时间超过 1 秒的 SQL 语句以及所有 DDL 语句都会被记录。慢查询日志保留最近 7 天的数据。
查询最近 30 分钟的慢语句:
SELECT query_start AS "开始时间",
query_end AS "结束时间",
query_duration_ms AS "耗时(ms)",
query_id AS "查询ID",
query AS "SQL语句"
FROM qmonitor.instance_slow_queries
WHERE query_start >= now() - interval '30 min';7. RAM 权限管理
阿里云使用访问控制 RAM 来管理对 AnalyticDB PostgreSQL 版资源的访问权限。RAM 用户、用户组或角色通过绑定权限策略获得指定的访问权限。
AnalyticDB PostgreSQL 版的 RAM 代码为 gpdb,支持的授权粒度为 RESOURCE。常用的系统权限策略包括:
- AliyunGPDBFullAccess:管理 AnalyticDB PostgreSQL 版的完全权限
- AliyunGPDBReadOnlyAccess:只读访问权限
RAM 用户创建的实例仍归属于阿里云主账号,而非 RAM 用户本身。在授权 RAM 用户操作实例前,主账号需要为其绑定显式的允许策略。
8. 监控与告警
AnalyticDB PostgreSQL 版的监控能力由云监控 CloudMonitor 提供。通过开启一键告警功能,CloudMonitor 将对账号下的所有 AnalyticDB PostgreSQL 版实例进行监控,并快速建立告警体系。
创建报警规则时,监控指标分为三组:废弃指标、实例维度和节点维度。当监控指标超过阈值时,云监控会通知告警联系组中的所有联系人。
为了提升运维效率,可以将报警规则保存为模板,在创建或修改报警规则时直接复用,无需重复定义。
9. 总结
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版作为一款 PB 级实时数据仓库,兼具高性能分析能力与丰富的生态对接能力。通过本文的系统介绍,读者可以从零开始完成实例创建、连接配置、数据写入、生态集成、性能优化、权限管理和监控告警的全链路实践。在实际生产环境中,建议根据业务场景合理选择实例形态(存储弹性模式或 Serverless Pro 模式)、数据写入方式(INSERT/COPY/OSS外表/Client SDK)以及查询优化策略(统计信息收集、优化器选型、索引设计),以充分发挥 AnalyticDB PostgreSQL 版的性能优势。
常见问题问答
问:AnalyticDB PostgreSQL 版存储弹性模式和 Serverless Pro 模式应该如何选择?
答:存储弹性模式采用存储计算一体架构,适合对性能稳定性要求较高、数据量和计算负载相对可预测的场景;Serverless Pro 模式采用存算分离架构,计算资源可以独立弹性伸缩,适合业务负载波动较大、需要按需付费的场景。建议根据业务负载特征和成本预算综合评估。
问:如何将本地 CSV 文件高效导入 AnalyticDB PostgreSQL 版?
答:推荐使用 COPY 命令,性能可达每秒 30 MB。对于更大的数据量,可以先将文件上传到 OSS,然后通过 OSS 外表进行并行导入,导入速度随 Segment 节点数线性扩展。
问:Flink 实时写入 AnalyticDB PostgreSQL 版有哪些限制?
答:主要限制包括:不支持 Serverless 模式实例;需要 VVR 6.0.0 及以上版本;7.0 版本需要 VVR 8.0.1 及以上版本;实例和 Flink 工作空间需在同一 VPC 下。
问:查询变慢时应该如何排查?
答:首先检查统计信息是否过期,执行 ANALYZE 收集最新统计信息。然后通过 qmonitor.instance_slow_queries 视图定位慢查询,分析执行计划。同时检查是否合理使用了索引,以及是否选择了合适的优化器(Legacy 或 ORCA)。
问:AnalyticDB PostgreSQL 版支持向量检索吗?
答:支持。AnalyticDB PostgreSQL 版集成了 FastANN 向量检索引擎作为索引插件,支持创建 ANN 向量索引,可以在使用向量检索的同时结合结构化和半结构化索引进行混合查询。
问:如何保证 AnalyticDB PostgreSQL 版的数据安全?
答:可以通过以下方式保障数据安全:使用 RAM 进行细粒度权限控制,遵循最小权限原则;配置 VPC 网络隔离;设置 IP 白名单限制访问来源;开启 SSL 加密连接;利用云监控配置异常告警及时响应安全事件。



