阿里雲提供了自動化遷移工具,支援DDL轉換,可以協助您將Amazon Redshift資料自動遷移至AnalyticDB for PostgreSQL。
準備工作
規格選型
以下內容將指導您如何根據源Amazon Redshift執行個體規格選擇目標AnalyticDB PostgreSQL版的規格。
Amazon Redshift執行個體由Leader Node和多個Compute Node組成。
Leader Node:相當於AnalyticDB PostgreSQL版的Master節點,負責與用戶端通訊,分析和制定執行計畫,實施資料庫操作。
Compute Node:相當於AnalyticDB PostgreSQL版的Segment節點,由多個Node Slices組成。每個Node Slices都相當於AnalyticDB PostgreSQL版的單個Segment節點,負責實際的資料存放區和查詢計算。
當建立AnalyticDB PostgreSQL版執行個體時,如果不知道如何選擇規格,根據Amazon Redshift中每個Node Slice的規格來選擇合適的AnalyticDB PostgreSQL版節點規格。
樣本
源Amazon Redshift執行個體包含4個Compute Node(每個Node下包含兩個Node Slices),每個Node Slices規格為2核16 GB,儲存為1 TB。
根據源Amazon Redshift執行個體規格,您在建立AnalyticDB PostgreSQL版執行個體時,可以選擇8個Segment節點,節點規格為2C16GB;每個Segment節點的儲存容量選擇1000 GB。
建立AnalyticDB PostgreSQL版執行個體具體操作,請參見建立執行個體。
儲存磁碟類型建議選擇ESSD雲端硬碟,I/O效能比高效雲端硬碟更佳。
操作步驟
步驟一:表DDL匯出與轉換
通過調用adbpg-redshift-migration.jar工具,可以實現從Amazon Redshift中匯出DDL,並將其自動轉換為與AnalyticDB for PostgreSQL相容的格式。表DDL匯出與轉換命令樣本如下,請根據實際情況替換相關參數值。
java -jar adbpg-redshift-migration.jar -d redshift -h r-red.cjbgr.cn-north-1.redshift.amazonaws.com.cn -p 5439 -U awsuser -w Lrz**** --transform執行該命令前需要配置Amazon Redshift所在VPC的安全性群組規則,確保遷移工具所屬的IP能夠通過網路訪問Amazon Redshift資料庫的服務連接埠。
參數說明
-d:指定需要下載或轉換的資料庫類型,該步驟指定為
redshift。-h:指定Redshift執行個體的Host,可在Redshift執行個體控制台介面的JDBC URL模組中擷取。如
jdbc:redshift://r-red.cjbgr.cn-north-1.redshift.amazonaws.com.cn:5439/dev中r-red.cjbgr.cn-north-1.redshift.amazonaws.com.cn即為Host。-p:訪問連接埠,Redshift固定為5439。
-U:Redshift的超級使用者名稱稱,通常為建立時的awsuser。
-w:Redshift的超級使用者對應的密碼。
--transform:進行DDL的下載和轉換。下載的DDL儲存於名為ddl_dump_20250227174322.txt的檔案中,檔案名稱中的數字串代表下載時的時間戳記。轉換後的DDL則儲存在ddl_transform_20250227202402.txt的檔案中,數字串同樣表示下載時的時間戳記。
在AnalyticDB for PostgreSQL中建立用於裝載Amazon Redshift資料的資料庫、模式和使用者資訊後,需檢查檔案ddl_transform_20250227202402.txt中的DDL是否存在問題。確認無誤後,即可在 AnalyticDB for PostgreSQL運行該檔案的SQL建立對應表結構。
步驟二:將Amazon Redshift的資料自動上傳至Amazon S3
執行如下命令(以下命令僅為樣本,請根據實際情況替換相關參數值),將Amazon Redshift資料匯出並上傳至Amazon S3。上傳至S3任務結束後,將產生兩個檔案:succeed_transfer_tables_20250228144558.txt表示上傳成功的表,failed_transfer_tables_20250228144558.txt表示上傳失敗的表。
java -jar adbpg-redshift-migration.jar -d redshift -h host-info -p 5432 -U dbuser -w Lrz**** -o s3 -b dbuser-bj --iam-account account-info --iam-role role-info --root-dir rootdir --format parquet --use-iam --china-region --jobs 8 -f tablelist.txt --upload參數說明
-o:指定要使用的雲端儲存體服務,Redshift通常使用S3。
-b:Amazon S3 Bucket名稱。
--iam-account:IAM角色的帳號ID,通常為12位元字,可在IAM角色的ARN中擷取。例如,
arn:aws-cn:iam::123456789012:role/lrz2中的123456789012。--iam-role:IAM角色名稱,例如
arn:aws-cn:iam::123456789012:role/lrz2中的lrz2。--root-dir:需要在S3上儲存資料的根目錄。
--format:資料匯出格式,支援CSV、PARQUET、JSON格式,暫不支援修改CSV格式中的行分隔字元。推薦使用PARQUET(adbpg-redshift-migration遷移工具的預設資料格式),匯出資料速度快且安全。
--use-iam:使用IAM角色上傳資料。
--china-region:如果是中國區則需要添加該參數,其它地區則無需添加。
--jobs:並行上傳。
-f:指定需要上傳的表名的檔案名稱。檔案內每一行僅寫入一張表的表名,表名格式為
database.schema.table。通常可使用--full來上傳Redshift中資料庫的全部表。--upload:使用上傳模式。
步驟三:將資料從S3遷移至OSS
將表資料上傳至S3後,使用阿里雲的OSS線上遷移服務將資料從S3遷移至OSS儲存。
步驟四:OSS資料自動匯入至AnalyticDB for PostgreSQL
資料移轉到OSS後,執行以下命令(以下命令僅為樣本,請根據實際情況替換相關參數值)將OSS資料匯入到AnalyticDB for PostgreSQL。
執行以下命令需要您提交工單聯絡支援人員開通超級使用者權限。
java -jar adbpg-redshift-migration.jar -d adbpg -h gp-2ze312*******o-master.gpdb.rds.aliyuncs.com -p 5432 -U dbuser -w Lrz**** -o oss -e oss-cn-beijing-internal.aliyuncs.com -i "LTAI5tP*******rCrdj" -k "4k3ntmvK*******M2mqjQcuOy" -b dbuser-bj --root-dir rootdir --format parquet --jobs 8 -f tablelist.txt --download參數說明
-d:指定需要下載或轉換的資料庫類型,該步驟指定為
adbpg。-h:AnalyticDB for PostgreSQL執行個體的Host。您可從外網地址擷取Host。
-p:AnalyticDB for PostgreSQL訪問連接埠,固定值為5432。
-U:AnalyticDB for PostgreSQL初始帳號名稱。
-w:AnalyticDB for PostgreSQL初始帳號對應的密碼。
-o:指定需要使用的雲端儲存,此處為OSS。
-e:資料所在的OSS Bucket的Endpoint。
-i :OSS的AccessKey ID。
-k:OSS的AccessKey Secret。
-b:OSS的Bucket。
--root-dir:指定OSS根目錄。
-f:指定要下載的表名的檔案名稱。檔案內每一行僅寫入一張表的表名,表名格式為
database.schema.table。通常直接使用上傳時產生的檔案,例如succeed_transfer_tables_20250228144558.txt。--new-name-file: 使用該參數指定AnalyticDB for PostgreSQL中對應的表名的檔案。在AnalyticDB for PostgreSQL中表名與Redshift中表名不一致的情況下使用該參數。檔案內每一行僅寫入一張表名,表名格式為
database.schema.table,每一行與-f指定檔案中的每一行表名一一對應。--download:使用下載模式。