Amazon Redshift¶
Redshift では、Virtual DataPort によって生成されたデータファイルを Redshift にアップロードするために、以下の 2 つの方法が用意されています。
データファイルを S3 バケットにアップロードして、そこからデータベースにアップロードします (推奨される方法)。この方法を使用するには、データソースの [Read & Write] タブで以下のように設定します。
[Use bulk data load APIs] をチェックします。
[Authentication type] を選択します。
[AWS access key id]、[AWS secret access key] の値を入力するか、 資格情報ボールト から資格情報を取得するために [パスワードボールト (資格情報保管場所) から資格情報を取得 (Obtain credentials from password vault)] をチェックします。
[AWS IAM role ARN] の値を入力します (オプション)。
[S3 bucket name] を入力します。
ラベルが SSH で始まるボックスは空のままにします。
[AWS IAM role ARN] (オプション) は、ユーザーが引き受ける IAM ロールの Amazon リソースネーム です。このロールは、AWS S3 バケットの管理に必要な権限を付与します。ロール ARN の形式は
arn:aws:iam::<awsAccountId>:role/<roleName>
です。または 2 番目の方法として、データファイルが保存されているホストに SSH 経由で接続するアクセス権限を Redshift に付与します。この方法は、データファイルが保存されているホストが Linux である場合にのみ使用できます。
この方法を使用するには、1 番目の方法と同じ値を指定した上で、以下に示す「SSH」で始まるボックスに値を入力します。
SSH endpoint: データファイルを取得するために Redshift インスタンスが接続するホスト。
SSH work path: Redshift インスタンスがデータファイルを探すディレクトリ。
SSH user name: Redshift インスタンスがこのホストに接続するために使用するユーザー名。
SSH public key: Redshift インスタンスがこのホストに接続するために使用する公開キー。ユーザー名とパスワードではなく、この公開キーを使用して接続できるようにホストを構成する必要があることに注意してください。
Denodo サーバーから Amazon Redshift にデータをアップロードすると、他のアダプターを使用するよりもプロセスが効率化します。すべてのデータが含まれる 1 つのファイルを生成してディスクに完全に書き込んでから Redshift に転送するのではなく、データは複数のチャンクで並列してアップロードされるためです。
ビューのキャッシュをロードするクエリを実行するにあたって、キャッシュデータベースが Redshift であるとします。キャッシュロードプロセスは以下のように実行されます。
サーバーがクエリを実行して、キャッシュデータベースに保存する必要がある行を取得し始めます。結果の最初の数行を取得するとすぐに、それらをデータファイルに書き込み始めます。このファイルは圧縮されてディスクに書き込まれます。
サーバーは、ファイルに 500,000 行を書き込むと、ファイルを閉じて、Redshift に送信し始めます。同時に、後続の行を別のファイルに書き込みます。
500,000 は、データソースの [Read & Write] タブの [Batch insert size (rows)] フィールドのデフォルト値であり、変更可能です。この値を増やすと、アップロードプロセスの並列性が低下することに注意してください。
サーバーは、別のデータファイルへの書き込みを終了すると (つまり、ファイルがバッチ挿入サイズに到達すると)、先に生成されていたファイルの転送が完了していなくても、Redshift にファイルを転送し始めます。デフォルトでは、クエリあたり最大 4 つのファイルを同時に転送します。ファイルの数がこの制限に到達すると、サーバーはデータファイルに行を書き込み続けますが、それ以上ファイルを転送しません。
この制限は、VQL シェルで次のコマンドを実行することによって変更できます。
SET 'com.denodo.vdb.util.tablemanagement.sql.insertion.DFInsertWorker. redshift.maxS3ParallelUploads' = '<new limit per query>';
データファイルは、送信後に削除されます。
サーバーは、すべてのファイルをアップロードした後、Redshift にそれらのファイルを読み込むように指示します。
注釈
2 番目の方法 (つまり Redshift がホストのいずれかに接続してデータファイルを読み取る方法) を使用するようにデータソースを構成する場合、上記の説明は当てはまりません。代わりに、Virtual DataPort がデータをディスクに書き込み始めます。このクエリが終了して、すべてのデータがディスクに書き込まれた後、Redshift にそれらのファイルを読み込むように指示します。この方法は、特に数億行を処理する場合、1 番目の方法 (推奨される方法) より遅くなります。なぜなら、クエリが終了してすべてのデータがファイルに書き込まれるまで、Redshift はデータの取得を開始しないからです。1 番目の方法では、Virtual DataPort は最初のファイル (つまり [Batch insert size] フィールドで指定されている行数が書き込まれたファイル) が完了するとすぐにデータをアップロードし始めます。
S3 バケットの AWS リージョンの構成
Virtual DataPort では、デフォルトで AWS リージョン「us-west-2」を使用します。
S3 バケットに他の AWS リージョンからアクセスする必要がある場合 (ファイアウォールルール、DNS の構成などのため)、以下のいずれかのオプションで構成できます。
構成パラメータ
com.denodo.vdb.util.tablemanagement.aws.s3.region.<database_name>.<datasource_name>
で、必要な AWS リージョンを設定します。<database_name>
と<datasource_name>
はオプションです。特定のデータソースの AWS リージョンを変更するには、以下を実行します。
-- Changing the AWS region of the S3 bucket for the data source "ds_jdbc_aws" of the database "customer360" SET 'com.denodo.vdb.util.tablemanagement.aws.s3.region.customer360.ds_jdbc_aws' = 'us-east1';
データベースのすべてのデータソースで使用される Amazon Athena と Amazon Redshift の S3 バケットの AWS リージョンを変更するには、以下を実行します。
-- Changing the AWS region of the S3 bucket for the data sources of the database "customer360" SET 'com.denodo.vdb.util.tablemanagement.aws.s3.region.customer360' = 'us-east1';
すべてのデータベースのデータソースで使用される Amazon Athena と Amazon Redshift の S3 バケットの AWS リージョンを変更するには、以下を実行します。
SET 'com.denodo.vdb.util.tablemanagement.aws.s3.region' = 'us-east2';
これらのプロパティを削除する (デフォルト値に戻す) には、該当のプロパティを NULL に設定します。以下に例を示します。
SET 'com.denodo.vdb.util.tablemanagement.aws.s3.region' = NULL;
これらの構成パラメータが定義されていない場合、Denodo では、AWS リージョンを以下から取得することを試みます。
環境変数
AWS_REGION
。JVM オプション
aws.region
。共有の AWS 構成ファイル。
Virtual DataPort サーバーが EC2 上で動作する場合の EC2 Metadata サービス。
パラメータ com.denodo.vdb.util.tablemanagement.aws.s3.region
(およびデータソースやデータベースに固有の同じパラメータ) の変更はすぐに適用されます。Virtual DataPort を再起動する必要はありません。