阿里云 AnalyticDB for PostgreSQL(以下简称 ADB PG, 即原 HybridDB for PostgreSQL)为基于 PostgreSQL 内核的 MPP 架构的实时数据仓库服务, 可以支持复杂 ETL 任务, 也支持高性能在线查询, 同阿里云生态紧密结合. AWS 的 Redshift 同样为基于 PostgreSQL 内核引擎的 MPP 数据仓库服务器, 在 AWS 被广泛作为数据仓库使用. ADB PG 和 Redshift 从架构到语法上同 Redshift 高度兼容. 本文重点介绍两个数仓平台如何进行迁移.
产品架构比较
阿里云 AnalyticDB for PostgreSQL 最新版本 6.0 基于 PostgreSQL 9.4 构建, Redshift 基于 PostgreSQL 8.2 版本, 相对 ADB PG 的功能要更加全面, 且全面兼容 PostgreSQL 生态的工具, 包括 PostGIS,MADlib 等扩展分析. Redshift 只支持列存表, 而不支持 PostgreSQL 原生的行存表, 而 ADB PG 即保留了 PostgreSQL 行存表支持, 实现高吞吐的数据更新操作, 也支持面向 OLAP 大表聚合操作的列存表.
AnalyticDB for PG 与 Redshift 的比较
功能项目 | ADB PG | Redshift |
---|---|---|
PostgreSQL 版本 | PG 9.4 | PG 8.2 |
SQL 语法 | 兼容 PG,部分兼容 Oracle 语法 | 兼容 PG |
事务 | 支持 | 支持 |
行存储 | 支持 | 不支持 |
列存储 | 支持 | 支持 |
表分区 | 支持 | 支持 |
云存储 | 支持 OSS 数据在线访问 | 支持 S3 数据在线访问 |
多模分析 | PostGIS/MADLib / 向量检索 |
关键语法比较及迁移
阿里云 AnalyticDB for PostgreSQL 与 AWS Redshift 都基于单机 PostgreSQL 内核引擎, 故语法高度兼容, 部分语法描述略有差异如下.
DDL 建表语法差异
语法 | Redshift | ADB PG |
---|---|---|
表 Hash 分布 | DISTKEY(col) | DISTRIBUTED BY(col) |
表随机分布 | DISTSTYLE EVEN | DISTRIBUTED RANDOMLY |
表复制分布 | DISTSTYLE ALL | DISTRIBUTED REPLICATED |
数据编码压缩 | AZ64/BYTEDICT/DELTA/LZO/RAW/RUNLENGTH/ZSTD | (COMPRESSTYPE={ZStD/ZLIB/QUICKLZ/RLE_TYPE/NONE}) |
列存排序键 | SORTKEY (col) | with(APPENDONLY=true,ORIENTATION=column)sortkey (volume) |
系统函数 | PG8.2 及部分自定义函数 | PG9.4 及部分自定义函数 |
语法指南
ADB PG 建表指南
Redshift 建表指南
DDL 转换示例 1
Redshift 建表语句, 包含分布键 DISTKEY 和排序列:
- CREATE TABLE schema1.table1(
- filed1 VARCHAR(100) ENCODE lzo,
- filed2 INTEGER DISTKEY,
- filed3 INTEGER,
- filed4 BIGINT ENCODE lzo,
- filed5 INTEGER,)
- INTERLEAVED SORTKEY (
- filed1,
- filed2);
ADB PG 建表语句:
- CREATE TABLE schema1.table1
- (
- filed1 VARCHAR(100) ,
- filed3 INTEGER,
- filed5 INTEGER
- )
- WITH(APPENDONLY=true,ORIENTATION=column,COMPRESSTYPE=zlib)
- DISTRIBUTED BY (filed2)
- SORTKEY
- (
- filed1,
- filed2
- )
DDL 转换示例 2
Redshift 建表语句, 包含 ENCODE 和 SORTKEY 选项:
- CREATE TABLE schema2.table2
- (
- filed1 VARCHAR(50) ENCODE lzo,
- filed2 VARCHAR(50) ENCODE lzo,
- filed3 VARCHAR(20) ENCODE lzo,
- )
- DISTSTYLE EVEN
- INTERLEAVED SORTKEY
- (
- filed1
- );
ADB PG 建表语句:
- CREATE TABLE schema2.table2(
- filed1 VARCHAR(50),
- filed2 VARCHAR(50),
- filed3 VARCHAR(20))
- WITH(APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib)
- DISTRIBUTED randomly
- SORTKEY
- (
- filed1
- );
数据迁移
Redshift 和 ADB PG 均支持从云存储的告诉并行数据导入和导出. 从 Redshift 迁移数据到 AnalyticDB for PostgreSQL 包含如下步骤:
资源和环境准备, 执行操作前需提前准备 Amazon Redshift,Amazon S3(Amazon Simple Storage Service),AnalyticDB for PostgreSQL 和阿里云对象存储服务 (OSS) 的相关资源.
将 Redshift 的数据导入到 Amazon S3 中.
使用 OSSImport 将 Amazon S3 中 CSV 格式的数据文件导入到 OSS.
在目标 AnalyticDB for PostgreSQL 中创建和源 Redshift 对应的对象, 包括模式 (Schema), 表(Table), 视图(View) 和函数(Function).
使用 OSS 外部表将数据导入到 AnalyticDB for PostgreSQL.
整体迁移路径如下:
详细操作步骤可参见
来源: https://yq.aliyun.com/articles/742415