Amazon Redshift

Redshift では、Virtual DataPort によって生成されたデータファイルを Redshift にアップロードするために、以下の 2 つの方法が用意されています。

  1. データファイルを S3 バケットにアップロードして、そこからデータベースにアップロードします (推奨される方法)。

    この方法を使用するには、データソースの [Read & Write] タブで、[Use bulk data load APIs] をチェックし、[Authentication type] を選択し、[AWS access key id]、[AWS secret access key]、[AWS IAM role ARN] (オプション)、および [S3 bucket name] の値を入力します。[AWS IAM role ARN] は、ユーザーが引き受ける IAM ロールの Amazon リソースネームであり、オプションのフィールドです。このロールは、AWS S3 バケットの管理に必要な権限を付与します。ロール ARN の形式は arn:aws:iam::<awsAccountId>:role/<roleName> です。ラベルが「SSH」で始まるボックスは空のままにします。

  2. または 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 であるとします。キャッシュロードプロセスは以下のように実行されます。

  1. サーバーがクエリを実行して、キャッシュデータベースに保存する必要がある行を取得し始めます。結果の最初の数行を取得するとすぐに、それらをデータファイルに書き込み始めます。このファイルは圧縮されてディスクに書き込まれます。

  2. サーバーは、ファイルに 500,000 行を書き込むと、ファイルを閉じて、Redshift に送信し始めます。同時に、後続の行を別のファイルに書き込みます。

    500,000 は、データソースの [Read & Write] タブの [Batch insert size (rows)] フィールドのデフォルト値であり、変更可能です。この値を増やすと、アップロードプロセスの並列性が低下することに注意してください。

  3. サーバーは、別のデータファイルへの書き込みを終了すると (つまり、ファイルがバッチ挿入サイズに到達すると)、先に生成されていたファイルの転送が完了していなくても、Redshift にファイルを転送し始めます。デフォルトでは、クエリあたり最大 4 つのファイルを同時に転送します。ファイルの数がこの制限に到達すると、サーバーはデータファイルに行を書き込み続けますが、それ以上ファイルを転送しません。

    この制限は、VQL シェルで次のコマンドを実行することによって変更できます。

    SET 'com.denodo.vdb.util.tablemanagement.sql.insertion.DFInsertWorker.
    redshift.maxS3ParallelUploads' = '<new limit per query>';
    
  4. データファイルは、送信後に削除されます。

  5. サーバーは、すべてのファイルをアップロードした後、Redshift にそれらのファイルを読み込むように指示します。

注釈

2 番目の方法 (つまり Redshift がホストのいずれかに接続してデータファイルを読み取る方法) を使用するようにデータソースを構成する場合、上記の説明は当てはまりません。代わりに、Virtual DataPort がデータをディスクに書き込み始めます。このクエリが終了して、すべてのデータがディスクに書き込まれた後、Redshift にそれらのファイルを読み込むように指示します。この方法は、特に数億行を処理する場合、1 番目の方法 (推奨される方法) より遅くなります。なぜなら、クエリが終了してすべてのデータがファイルに書き込まれるまで、Redshift はデータの取得を開始しないからです。1 番目の方法では、Virtual DataPort は最初のファイル (つまり [Batch insert size] フィールドで指定されている行数が書き込まれたファイル) が完了するとすぐにデータをアップロードし始めます。