如何将应用和数据从 AWS Redshift 迁移到阿里云 AnalyticDB for PostgreSQL

阿里云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 ADB 全面兼容PG生态
SQL语法 兼容PG,部分兼容Oracle语法 兼容PG ADB 兼容性更强
事务 支持 支持
行存储 支持 不支持 ADB PG基于行存储实现高吞吐数据更新操作
列存储 支持 支持
存储过程 支持 不支持 ADB支持PL/SQL, PL/Java等过程语言
表分区 支持 支持
云存储 支持OSS数据在线访问 支持S3数据在线访问
多模分析 PostGIS, MADLib, 向量检索 不支持 ADB PG支持时空数据分析,机器学习算法,非结构化数据检索

关键语法迁移及转换

阿里云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 (no compression)/RUNLENGTH/ZSTD with (COMPRESSTYPE={ZStD/ZLIB/QUICKLZ/RLE_TYPE/NONE})
列存排序键 SORTKEY (col) with(APPENDONLY=true,ORIENTATION=column)sortkey (volume)

语法指南

[ADB PG建表指南]( https://help.aliyun.com/document_detail/118150.html)
[Redshift建表指南](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html)

数据迁移

Redshift和ADB PG均支持从云存储的告诉并行数据导入和导出。从Redshift迁移数据到AnalyticDB for PostgreSQL包含如下步骤:
1.资源和环境准备,执行操作前需提前准备Amazon Redshift、Amazon S3(Amazon Simple Storage Service)、AnalyticDB for PostgreSQL和阿里云对象存储服务(OSS)的相关资源。
2.将Redshift的数据导入到Amazon S3中。
3.使用OSSImport将Amazon S3中CSV格式的数据文件导入到OSS。
4.在目标AnalyticDB for PostgreSQL中创建和源Redshift对应的对象,包括模式(Schema)、表(Table)、视图(View)和函数(Function)。
5.使用OSS外部表将数据导入到AnalyticDB for PostgreSQL。

整体迁移路径如下:

如何将应用和数据从 AWS Redshift 迁移到阿里云 AnalyticDB for PostgreSQL

详细操作步骤可参见