Alibaba Cloud データオンライン移行または ossimport ツールを使用して、Amazon Redshift から AnalyticDB for PostgreSQL にデータを移行できます。
前提条件
Amazon Redshift クラスタが作成されている。
Amazon Redshift データのエクスポートに使用する Amazon S3 がアクティブ化されている。
Alibaba Cloud Object Storage Service (OSS) がアクティブ化されている。 詳細については、「OSS とは」をご参照ください。
OSS バケットが作成されている。 詳細については、「バケットを作成する」をご参照ください。
説明後続のデータインポートを容易にするために、AnalyticDB for PostgreSQL インスタンスと同じリージョンに OSS バケットを作成することをお勧めします。
AnalyticDB for PostgreSQL インスタンスが作成されている。 インスタンス仕様の選択方法については、このトピックの「仕様の選択」セクションをご参照ください。
仕様の選択
このセクションでは、ソース Amazon Redshift クラスタの仕様に基づいて AnalyticDB for PostgreSQL インスタンスの仕様を選択する方法について説明します。
Amazon Redshift クラスタは、[リーダーノード] と複数の [計算ノード] で構成されます。
[リーダーノード]: AnalyticDB for PostgreSQL インスタンス内のコーディネーターノードとして機能します。 リーダーノードは、クライアントとの通信、クエリ実行計画の分析と開発、およびデータベース操作を実行します。
[計算ノード]: AnalyticDB for PostgreSQL インスタンス内の一連の計算ノードとして機能します。 Amazon Redshift クラスタの各計算ノードはスライスに分割されます。 各ノードスライスは、AnalyticDB for PostgreSQL インスタンス内の計算ノードとして機能し、データストレージとクエリの計算を実行します。
AnalyticDB for PostgreSQL インスタンスを作成する場合は、ソース Amazon Redshift クラスタの各ノードスライスの仕様に基づいて、インスタンスのノード仕様を選択できます。
例
Amazon Redshift クラスタは 4 つの計算ノードで構成されています。 各計算ノードは 2 つのノードスライスで構成されています。 各ノードスライスの仕様は、2 コア、16 GB メモリ、1 TB ストレージです。
AnalyticDB for PostgreSQL インスタンスを作成する場合は、計算ノード数を 8 に設定し、ノード仕様を 2 コアと 16 GB メモリに設定し、単一ノードストレージを 1,000 GB に設定できます。
AnalyticDB for PostgreSQL インスタンスの作成方法については、「インスタンスの作成」をご参照ください。
ESSD は Ultra ディスクよりも優れた I/O パフォーマンスを提供するため、ストレージタイプを [拡張 SSD (ESSD)] に設定することをお勧めします。
手順
手順 1: Amazon Redshift クラスタから Amazon S3 バケットにデータをエクスポートする
UNLOAD 文を実行してデータをエクスポートできます。 詳細については、「UNLOAD」をご参照ください。
構文:
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
AUTHORIZATION
[ option [ ... ] ]
WHERE option IS
{ [ FORMAT [ AS ] ] CSV | PARQUET
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| REGION [AS] 'Amazon-region' }FORMAT AS PARQUET または CSV パラメータを使用して、エクスポートされるデータの形式を指定することをお勧めします。
より多くのファイルが生成され、データエクスポート効率が向上するように、PARALLEL ON パラメータを指定してデータを並列でエクスポートすることをお勧めします。
より多くのファイルを生成するために、MAXFILESIZE パラメータを指定してファイルサイズを制限することをお勧めします。 推奨値は、AnalyticDB for PostgreSQL インスタンス内のノード数の整数倍です。 これにより、後で OSS 外部テーブルから AnalyticDB for PostgreSQL インスタンスにデータを並列でインポートする際のデータインポート効率が向上します。
手順 2: Amazon S3 から OSS にデータを同期する
Alibaba Cloud データオンライン移行または ossimport ツールを使用して、Amazon S3 から OSS にデータを同期できます。
データオンライン移行
Data Transport コンソール にログインします。
データ同期のためのソースデータアドレスとデスティネーションデータアドレスを作成します。
左側のナビゲーションウィンドウで、 を選択します。
[データアドレスの作成] をクリックして、ソースデータアドレスを作成します。
[データアドレスの作成] パネルで、次の表に示すパラメータを構成し、[OK] をクリックします。
パラメータ
必須
説明
[名前]
はい
ソースデータアドレスの名前。 名前は次の要件を満たしている必要があります。
名前の長さは 3 ~ 63 文字です。
名前は大文字と小文字が区別され、小文字、数字、ハイフン (-)、アンダースコア (_) を使用できます。
名前は UTF-8 形式でエンコードされ、ハイフン (-) またはアンダースコア (_) で始めることはできません。
[タイプ]
はい
ソースデータアドレスのタイプ。 [AWS S3] を選択します。
[ドメイン名]
はい
ソースデータアドレスのエンドポイント。 詳細については、「Amazon Simple Storage Service エンドポイントとクォータ」トピックの「Amazon S3 エンドポイント」セクションをご参照ください。
[AccessKeyId]
はい
ソースデータアドレスからデータを読み取るために使用される Identity and Access Management (IAM) ユーザーのアクセスキーペア。 Amazon S3 はアクセスキーペアを使用して、IAM ユーザーにソースデータアドレスからデータを読み取る権限があるかどうかを確認します。
[SecretAccessKey]
はい
[バケット]
はい
移行するデータが格納されている Amazon S3 バケットの名前。
説明バケット名には、スペース、改行、タブ文字などの無効な文字を含めることはできません。
[プレフィックス]
いいえ
ソースデータアドレスのプレフィックス。 プレフィックスを指定して特定のデータを移行できます。
プレフィックスを指定した場合、プレフィックスで指定されたディレクトリ内のデータのみが移行されます。 プレフィックスはスラッシュ (/) で始めることはできず、スラッシュ (/) で終わる必要があります。
プレフィックスを指定しない場合、Amazon S3 バケット内のすべてのデータが移行されます。
[トンネル]
いいえ
使用するトンネルの名前。
重要このパラメータは、Express Connect 回線または VPN ゲートウェイを使用してクラウドにデータを移行する場合、または自己管理データベースからクラウドにデータを移行する場合にのみ必要です。
デスティネーションデータアドレスのデータがローカルファイルシステムに格納されている場合、または Alibaba Finance Cloud や Apsara Stack などの環境で Express Connect 回線を介してデータを移行する必要がある場合は、エージェントを作成してデプロイする必要があります。
[エージェント]
いいえ
使用するエージェントの名前。
重要このパラメータは、Express Connect 回線または VPN ゲートウェイを使用してクラウドにデータを移行する場合、または自己管理データベースからクラウドにデータを移行する場合にのみ必要です。
特定のトンネルに対して一度に最大 30 のエージェントを選択できます。
[データアドレスの作成] を再度クリックして、デスティネーションデータアドレスを作成します。
[データアドレスの作成] パネルで、次の表に示すパラメータを構成し、[OK] をクリックします。
パラメータ
必須
説明
[データタイプ]
はい
デスティネーションデータアドレスのタイプ。 [OSS] を選択します。
[データ名]
はい
ソースデータアドレスの名前。 名前の長さは 3 ~ 63 文字である必要があります。 名前にハイフン (-) とアンダースコア (_) 以外の特殊文字を含めることはできません。
[データリージョン]
はい
デスティネーションデータアドレスが存在するリージョン。
[転送アクセラレーションを有効にする]
いいえ
データオンライン移行を Object Storage Service (OSS) の転送アクセラレーション機能と一緒に使用する場合、バケットの転送アクセラレーション機能を有効にします。 転送アクセラレーション機能は、有効になってから 30 分以内に有効になります。 機能を有効にした後、移行ジョブを作成する前に 30 分待ちます。
重要転送アクセラレーション機能を使用して OSS バケットにアクセスする場合、追加の転送アクセラレーション料金が発生します。 詳細については、「転送アクセラレーション」をご参照ください。
[OSS エンドポイント]
はい
デスティネーションデータアドレスのエンドポイント。 デスティネーションデータアドレスが存在するリージョンに基づいてエンドポイントを選択します。 詳細については、「リージョンとエンドポイント」をご参照ください。
説明サードパーティクラウドサービスから OSS にデータを移行する場合、インターネット経由でパブリックエンドポイントから OSS にアクセスする必要があります。
[アクセスキー ID とアクセスキーシークレット]
はい
デスティネーションデータアドレスにデータを書き込むために使用される RAM ユーザーの AccessKey ペア。 AccessKey ペアは、RAM ユーザーにデスティネーションデータアドレスにデータを書き込む権限があるかどうかを OSS が確認するために使用されます。
[OSS バケット]
はい
データの移行先となる OSS バケット。
[OSS プレフィックス]
いいえ
デスティネーションデータアドレスのプレフィックス。
プレフィックスを指定した場合、ソースデータは指定されたディレクトリに移行されます。 値はスラッシュ (/) で始めることはできず、スラッシュ (/) で終わる必要があります。 例:
data/to/oss/。プレフィックスを指定しない場合、ソースデータはデスティネーションバケットのルートディレクトリに移行されます。
重要ソースファイルの名前がスラッシュ (/) で始まる場合、デスティネーションデータアドレスを指定するときに OSS プレフィックスを指定する必要があります。 OSS プレフィックスを指定しないと、移行ジョブは失敗します。 たとえば、移行するファイルの名前が /test/test.png の場合、oss/ などの OSS プレフィックスを指定する必要があります。 移行が完了すると、ファイルの名前は /test/test.png から oss//test/test.png に変更されます。
オンライン移行ジョブを作成します。
左側のナビゲーションウィンドウで、 を選択します。
[ジョブの作成] をクリックします。
[ジョブの作成] パネルで、移行サービスの利用規約を読み、[上記の利用規約に同意し、Data Transport サービスをアクティブ化する] を選択します。 次に、[次へ] をクリックします。
[料金リマインダー] メッセージで、[はい、続行します] をクリックします。
[ジョブの作成] パネルで、次の表に示すパラメータを構成し、[次へ] をクリックします。
パラメータ
必須
説明
[ジョブ名]
はい
ソースデータアドレスの名前。 名前の長さは 3 ~ 63 文字である必要があります。 名前にハイフン (-) とアンダースコア (_) 以外の特殊文字を含めることはできません。
[ソースデータアドレス]
はい
作成したソースデータアドレス。
[デスティネーションデータアドレス]
はい
作成したデスティネーションデータアドレス。
[指定されたディレクトリ]
いいえ
ファイルとサブディレクトリが移行されるか、移行されないディレクトリ。 有効な値:
[フィルタリングしない]: ソースデータアドレスからすべてのデータを移行します。
[除外]: 指定されたディレクトリ内のファイルまたはサブディレクトリを移行しません。
たとえば、
root_dir/bad_sub1/とroot_dir/bad_sub2/を除くroot_dir/ディレクトリ内のすべてのディレクトリを移行するとします。 この場合、この方法を選択し、bad_sub1/とbad_sub2/を指定できます。[含む]: 指定されたディレクトリ内のファイルとサブディレクトリのみを移行します。
たとえば、
root_dir/ディレクトリ内のroot_dir/good_sub1/とroot_dir/good_sub2/のみ移行するとします。 この場合、この方法を選択し、good_sub1/とgood_sub2/を指定できます。
説明ディレクトリ名には数字と文字のみを含めることができます。 特殊文字を使用すると、移行ジョブが失敗する可能性があります。
ディレクトリ名はスラッシュ (/) またはバックスラッシュ (\) で始めることはできず、二重スラッシュ (//)、二重ピリオド (..)、二重引用符 (") を含めることはできません。 指定されたすべてのディレクトリ名で構成される文字列の長さは 10 KB を超えることはできません。
ディレクトリ名はスラッシュ (/) で終わる必要があります。 たとえば、ディレクトリ名として
docs/を指定できます。除外または含むタイプのディレクトリは最大 20 個まで指定できます。
[移行タイプ]
はい
データ移行モード。 有効な値:
[完全]: システムはソースデータアドレスからデスティネーションデータアドレスにすべてのデータを移行します。 [ファイルの開始時点] パラメータを構成する必要があります。 システムは、最終変更時刻が指定された時刻以降のすべてのデータを移行します。 すべてのデータが移行されると、移行ジョブは終了します。
移行ジョブの完了後にソースデータアドレスのデータを変更した場合、別のジョブを送信してすべてのデータを移行できます。 この場合、システムは変更されたデータのみを移行します。
[増分]: システムは、[移行間隔] パラメータと [移行回数] パラメータに指定した値に基づいて移行ジョブを実行します。
[ファイルの開始時点] パラメータを構成する必要があります。 最初の移行中に、システムは最終変更時刻が指定された時刻以降のすべてのデータを移行します。 最初の移行が完了すると、[移行間隔] パラメータに指定した値に基づいて増分移行が実行されます。 増分移行ごとに、システムは前回の移行の開始後から今回の移行の開始前に作成または変更されたデータのみを移行します。
移行回数パラメータを N に設定すると、完全移行が 1 回実行され、次に増分移行が (N - 1) 回実行されます。
たとえば、現在の時刻が 2019 年 3 月 10 日 08:00 で、移行間隔パラメータを 1、移行回数パラメータを 5、[ファイルの開始時点] パラメータを 2019 年 3 月 5 日 08:00 に設定したとします。 最初の移行が開始されると、システムは最終変更時刻が 2019 年 3 月 5 日 08:00 から 2019 年 3 月 10 日 08:00 までのすべてのファイルを移行します。 この例では、最初の移行の完了には 1 時間かかり、2 回目の移行は 2019 年 3 月 10 日 10:00 に開始されます。 08:00 から 10:00 までの期間は、最初の移行プロセスに 1 時間、移行間隔に 1 時間で構成されます。 2 回目の移行中に、システムは最終変更時刻が 2019 年 3 月 10 日 08:00 から 2019 年 3 月 10 日 10:00 までのファイルを移行します。 移行ジョブは、1 回の完全移行と 4 回の増分移行で構成されます。
重要完全移行または増分移行が開始される前に、システムはソースデータアドレスのファイルとデスティネーションデータアドレスのファイルを比較します。 ソースファイルの名前がデスティネーションファイルと同じ名前の場合、次のいずれかの条件が満たされると、デスティネーションファイルは上書きされます。
ソースデータアドレスとデスティネーションデータアドレスのファイルの Content-Type 値が異なる。
ソースデータアドレスのファイルの最終変更時刻が、デスティネーションデータアドレスのファイルの最終変更時刻よりも遅い。
ソースデータアドレスのファイルのサイズが、デスティネーションデータアドレスのファイルのサイズと異なる。
[ファイルの開始時点]
はい
移行するデータをフィルタリングする時刻。 システムは、指定された時刻以降に作成または変更されたデータを移行します。 有効な値:
[すべて]: すべてのファイルを移行します。
[割り当て]: 指定された時刻以降に作成または変更されたファイルのみを移行します。
たとえば、時刻を 2018 年 11 月 1 日 08:00:00 に設定すると、2018 年 11 月 1 日 08:00:00 以降に作成または変更されたファイルのみが移行されます。
[移行間隔]
移行タイプパラメータを増分値に設定した場合、このパラメータは必須です。
デフォルト値は 1 で、最大値は 24 です。 単位: 時間。
[移行回数]
移行タイプパラメータを増分値に設定した場合、このパラメータは必須です。
デフォルト値は 1 で、最大値は 30 です。
[ファイル上書き方法]
はい
名前がデスティネーションデータアドレスのファイルと同じ名前のソースデータアドレスのファイルを処理するために使用される方法。 有効な値:
[最終更新日]: ソースファイルの名前がデスティネーションファイルと同じ名前の場合、システムはファイルの LastModified プロパティで示される最終変更時刻を比較します。
ソースデータアドレスのファイルの最終変更時刻が、デスティネーションデータアドレスのファイルの最終変更時刻よりも遅い場合、ソースデータアドレスのファイルが移行され、デスティネーションデータアドレスのファイルが上書きされます。
ソースデータアドレスのファイルの最終変更時刻が、デスティネーションデータアドレスのファイルの最終変更時刻よりも早い場合、ソースデータアドレスのファイルは移行されず、デスティネーションデータアドレスのファイルは保持されます。
2 つのファイルの最終変更時刻が同じ場合、システムはファイルの Size プロパティと Content-Type プロパティの値を確認します。
2 つのファイルの Size 値と Content-Type 値が同じ場合、ソースデータアドレスのファイルは移行されません。 2 つのファイルの少なくとも 1 つのプロパティの値が異なる場合、ソースデータアドレスのファイルが移行され、デスティネーションデータアドレスのファイルが上書きされます。
[条件]: ソースファイルの名前がデスティネーションファイルと同じ名前の場合、システムはファイルの LastModified、Size、および Content-Type プロパティの値を比較します。
2 つのファイルのすべてのプロパティ値が同じ場合、ソースデータアドレスのファイルは移行されません。
2 つのファイルの少なくとも 1 つのプロパティの値が異なる場合、ソースデータアドレスのファイルが移行され、デスティネーションデータアドレスのファイルが上書きされます。
[すべて]: ソースファイルの名前がデスティネーションファイルと同じ名前の場合、システムは比較を実行せずに、デスティネーションファイルをソースファイルで直接上書きします。
[いいえ]: ソースファイルの名前がデスティネーションファイルと同じ名前の場合、システムは比較を実行せずに、移行でソースファイルを直接スキップします。
警告[条件] または [最終更新日] を選択すると、以前のファイルが後のファイルを上書きする場合があります。
[条件] または [最終更新日] を選択する場合は、ソースファイルに LastModified、Size、Content-Type の値があることを確認してください。 そうしないと、上書きポリシーが無効になり、データが想定どおりに移行されない可能性があります。
[パフォーマンス] ステップで、[データ予測] セクションに移動し、[データサイズ] パラメータと [ファイル数] パラメータを構成します。
説明移行ジョブが成功するように、移行するデータ量をできるだけ正確に見積もることをお勧めします。 詳細については、「移行ジョブの準備」をご参照ください。
(オプション) [パフォーマンス] ステップで、[フロー制御] セクションに移動し、[時間範囲] パラメータと [最大フロー (MB/秒)] パラメータを指定して、[追加] をクリックします。
説明業務継続性を確保するために、トラフィックの変動に基づいて [時間範囲] パラメータと [最大フロー] パラメータを構成することをお勧めします。
[作成] をクリックし、移行ジョブが完了するまで待ちます。
ossimport
スタンドアロンモードで ossimport をダウンロードしてインストールします。 詳細については、「概要」をご参照ください。
スタンドアロンモードの ossimport ツールには、次のファイル構造があります。
ossimport ├── bin │ └── ossimport2.jar # Master、Worker、TaskTracker、および Console モジュールを含む JAR パッケージ。 ├── conf │ ├── local_job.cfg # ジョブ構成ファイル。 │ └── sys.properties # システムパラメータを含む構成ファイル。 ├── console.bat # Windows コマンドラインユーティリティ。分散方式でタスクを実行するために使用されます。 ├── console.sh # Linux コマンドラインユーティリティ。分散方式でタスクを実行するために使用されます。 ├── import.bat # Windows の conf/local_job.cfg 構成ファイルに基づいてファイルを自動的にインポートするスクリプト。 構成ファイルには、開始、移行、検証、再試行などのデータ移行操作を指定するパラメータが含まれています。 ├── import.sh # Linux の conf/local_job.cfg 構成ファイルに基づいてファイルを自動的にインポートするスクリプト。 構成ファイルには、開始、移行、検証、再試行などのデータ移行操作を指定するパラメータが含まれています。 ├── logs # ログを含むディレクトリ。 └ ── README.md # ossimport の説明を提供するファイル。 ossimport を使用する前に、このファイルを読むことをお勧めします。スタンドアロンモードで ossimport を構成します。
conf/local_job.cfg 構成ファイルでは、次のパラメータのみを変更する必要があります。
srcType=s3 srcAccessKey=<AWS アクセスキー> srcSecretKey=<AWS シークレットキー> srcDomain=<Amazon S3 バケットがデプロイされているリージョンに対応するドメイン名> srcBucket=<Amazon S3 バケットの名前> destAccessKey=<Alibaba Cloud AccessKey ID> destSecretKey=<Alibaba Cloud AccessKey シークレット> destDomain=<OSS バケットがデプロイされているリージョンに対応するエンドポイント> destBucket=<OSS バケットの名前> destPrefix= isSkipExistFile=true詳細については、「概要」をご参照ください。
ossimport を実行して OSS にデータを同期します。 スタンドアロンモードでの ossimport の使用方法については、「スタンドアロンデプロイメント」をご参照ください。
手順 3: デスティネーションテーブルを作成する
Amazon Redshift からデータを読み込むために、AnalyticDB for PostgreSQL インスタンスにデスティネーションテーブルを作成します。 デスティネーションテーブルのスキーマは、ソーステーブルと同じである必要があります。 詳細については、「CREATE TABLE」をご参照ください。
スキーマ、テーブル、関数、ビューなどのデータベースオブジェクトに関する情報を変更して、DDL 文を変換します。 詳細については、このトピックの「DDL 文を変換する」セクションをご参照ください。
手順 4: OSS から AnalyticDB for PostgreSQL インスタンスにデータをインポートする
COPY 文または OSS 外部テーブルを使用して、AnalyticDB for PostgreSQL にデータをインポートできます。
COPY 文を使用して OSS データをインポートする方法については、「COPY または UNLOAD 文を使用して OSS 外部テーブルと AnalyticDB for PostgreSQL テーブル間でデータをインポートまたはエクスポートする」をご参照ください。
OSS 外部テーブルを使用して OSS データをインポートする方法については、「OSS 外部テーブルをデータレイク分析に使用する」トピックの「データレイク分析に OSS 外部テーブルを使用する」セクションをご参照ください。
DDL 文を変換する
Amazon Redshift の DDL 文は AnalyticDB for PostgreSQL の DDL 文とは少し異なり、データを移行する前に変換する必要があります。
CREATE SCHEMA
AnalyticDB for PostgreSQL の CREATE SCHEMA 文を実行してスキーマを作成します。 例:
CREATE SCHEMA schema1 AUTHORIZATION xxxpoc;
GRANT ALL ON SCHEMA schema1 TO xxxpoc;
GRANT ALL ON SCHEMA schema1 TO public;
COMMENT ON SCHEMA model IS 'xxx 移行 poc テスト用';
CREATE SCHEMA oss_external_table AUTHORIZATION xxxpoc;CREATE FUNCTION
AnalyticDB for PostgreSQL は、Amazon Redshift の特定の SQL 関数をサポートしていません。 SQL 関数を変更または書き直す必要があります。 例:
CONVERT_TIMEZONE(a,b,c)関数を次の関数に置き換えます。timezone(b, timezone(a,c))GETDATE()関数を次の関数に置き換えます。current_timestamp(0):timestampユーザー定義関数 (UDF) を置き換えまたは最適化します。 次のサンプルコードは、Amazon Redshift の UDF の例を示しています。
CREATE OR REPLACE FUNCTION public.f_jdate(dt timestamp WITHOUT time zone) RETURNS character varying AS ' from datetime import timedelta, datetime if dt.hour < 4: d = timedelta(days=-1) dt = dt + d return str(dt.date())' /* datetime から timedelta、datetime をインポートします。 dt.hour が 4 未満の場合、d を timedelta(days=-1) に設定し、dt に d を加算します。 dt.date() の文字列表現を返します。 */ LANGUAGE plpythonu IMMUTABLE; COMMIT;上記の関数を次の関数に置き換えます。
to_char(a - interval '4 hour', 'yyyy-mm-dd')他の Amazon Redshift 関数を置き換えます。
標準 PostgreSQL 関数については、「関数と演算子」をご参照ください。 AnalyticDB for PostgreSQL でサポートされていない Amazon Redshift の SQL 関数 (次の関数など) を変更または書き直すことができます。
CREATE TABLE
テーブルの名前を変更します。
Amazon Redshift テーブルの名前の長さは最大 127 文字ですが、AnalyticDB for PostgreSQL テーブルの名前の長さは最大 63 文字です。 テーブル、関数、ビューなどのデータベースオブジェクトの名前の長さが 63 文字を超える場合は、超過文字を削除する必要があります。
圧縮アルゴリズムを変更します。
Amazon Redshift の CREATE TABLE 文の
ENCODE XXXを次の句に置き換えます。WITH (COMPRESSTYPE={ZLIB|ZSTD|RLE_TYPE|NONE})AnalyticDB for PostgreSQL でサポートされている圧縮アルゴリズムについては、「テーブルのストレージモデルを定義する」トピックの「データ圧縮」セクションをご参照ください。
分散キーを変更します。
Amazon Redshift は 3 つの分散キーをサポートしています。 詳細については、「分散スタイル」をご参照ください。 次のルールに基づいて分散キーを変更する必要があります。
EVEN 分散:
DISTRIBUTED RANDOMLYを使用します。KEY 分散:
DISTRIBUTED BY (列, [ ... ] )を使用します。ALL 分散:
DISTRIBUTED REPLICATEDを使用します。
ソートキーを変更します。
Amazon Redshift の
[ COMPOUND | INTERLEAVED ] SORTKEY (列名 [, ...] ) ]ソートキー句の COMPOUND オプションまたは INTERLEAVED オプションを次の句に置き換えます。ORDER BY (列, [ ... ])
例:
例 1:
次のサンプルコードは、Amazon Redshift の
CREATE TABLE文の例を示しています。CREATE TABLE schema1.table1 ( filed1 VARCHAR(100) ENCODE lzo, filed2 INTEGER DISTKEY, filed3 INTEGER, filed4 BIGINT ENCODE lzo, filed5 INTEGER ) INTERLEAVED SORTKEY ( filed1, filed2 );上記の文を、AnalyticDB for PostgreSQL の次の
CREATE TABLE文に変換します。CREATE TABLE schema1.table1 ( filed1 VARCHAR(100) , filed2 INTEGER, filed3 INTEGER, filed4 BIGINT, filed5 INTEGER ) WITH(APPENDONLY=true,ORIENTATION=column,COMPRESSTYPE=zstd) DISTRIBUTED BY (filed2) ORDER BY (filed1, filed2); -- ソート SORT schema1.table1; MULTISERT INTO schema1.table1 SELECT * FROM schema1.table1_tmp;例 2:
次のサンプルコードは、ENCODE オプションと SORTKEY オプションを含む、Amazon Redshift の
CREATE TABLE文の例を示しています。CREATE TABLE schema2.table2 ( filed1 VARCHAR(50) ENCODE lzo, filed2 VARCHAR(50) ENCODE lzo, filed3 VARCHAR(20) ENCODE lzo, ) DISTSTYLE EVEN INTERLEAVED SORTKEY ( filed1 );上記の文を、AnalyticDB for PostgreSQL の次の
CREATE TABLE文に変換します。CREATE TABLE schema2.table2 ( filed1 VARCHAR(50), filed2 VARCHAR(50), filed3 VARCHAR(20), ) WITH(APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zstd) DISTRIBUTED randomly ORDER BY (filed1); -- ソート SORT schema2.table2; MULTISORT schema2.table2;説明詳細については、「列指向テーブルでクエリを高速化するためにソートキーとラフセットインデックスを使用する」をご参照ください。
CREATE VIEW
Amazon Redshift の CREATE VIEW 文を、AnalyticDB for PostgreSQL 構文に準拠した SQL 文に変換します。変換ルールは、CREATE TABLE 文の変換ルールと似ています。
WITH NO SCHEMA BINDING 句はサポートされていません。
参考資料
自動データ移行の詳細については、「Amazon Redshift クラスターから AnalyticDB for PostgreSQL インスタンスへの自動データ移行を設定する」をご参照ください。