VDP 抽出セクション¶
VDP タイプのジョブの抽出セクションを構成するには、VDP タイプのデータソースを選択する必要があります。選択後、VDP サーバーに対して実行されるクエリを パラメータ化クエリ ステートメントを使用して指定する必要があります ([Parameterized query] フィールド)。
パラメータ化クエリとは、サーバーのクエリ言語 (VQL) で表されたクエリのことで、先頭に文字 @ を付加した変数を含めることができます (含める変数の詳細な構文については「 パラメータ化クエリの構文 」のセクションで説明しています)。変数を含むパラメータ化クエリは、サーバーに対して実行するクエリのグループを表します。各変数を入力値のリストに含まれる値で置き換えることで、異なるクエリが生成されます。入力値のリストは、データソースから取得されます (「 データソース 」のセクションを参照)。
例: 次のパラメータ化クエリを、Virtual DataPort サーバー内の CLIENTS
と呼ばれるビューからデータを取得するように構成するとします。
SELECT *
FROM CLIENTS
WHERE taxId = '@TaxId'
また、以下のような Tax ID のリストを含む CSV ファイルにアクセスするためのデータソースも構成するとします。
また、これらの値は変数 @TaxId
に関連付けられているものとします (「 パラメータ化クエリで使用される値の構成 」のセクションでその方法を詳しく説明しています)。その後、Denodo Scheduler が Virtual DataPort 上で、すべてのジョブデータを取得するための以下のクエリを生成します。
SELECT * FROM CLIENTS WHERE TaxId = 'B78596011';
SELECT * FROM CLIENTS WHERE TaxId = 'B78596012';
SELECT * FROM CLIENTS WHERE TaxId = 'B78596013';
「 パラメータ化クエリで使用される値の構成 」のセクションでは、変数に値を割り当てるために使用できるソースについて説明しています。
各ソースは、1 つまたは複数の変数に同時に値を提供できます。異なるソースがある場合、Scheduler はパラメータ化ステートメントから可能な限り多くのクエリを生成して、変数に値を提供する各ソースから返されるデータと組み合わせます。
さらに、同じパラメータ化クエリから実行するクエリの組み合わせの数と、同時実行性のレベルも構成できます。
Maximum number of iterations: 指定されたパラメータ化クエリステートメントから生成されるクエリの最大数を指定します。指定された値が生成されるクエリの組み合わせの数より大きい場合、その値は無視されます。この値を指定しないと、すべての組み合わせが実行されます。
Maximum number of concurrent iterations: パラメータ化クエリによって生成されたクエリから並行して実行されるクエリの最大数を指定します。同時実行はブロックごとに行われます。つまり、最初のブロックのクエリの実行が終了しないと、次のブロックのクエリの実行は開始されません。この値を指定しないと、すべてのクエリが連続して実行されます。
Scheduler は、まだ実行されていないクエリの組み合わせ、または何らかのタイプのエラーを返したクエリの組み合わせと区別するために、正常に実行されたクエリの組み合わせをログに記録します。そのため、最後の実行でエラーを返したクエリやまだ実行されていないクエリの実行を繰り返すジョブに、再試行用のハンドラーを関連付けることができます (「 ハンドラーセクション 」のセクションを参照) (サーバーでクエリが正常に実行されず、その原因が不明な場合に役立ちます)。また、アクション Start with state を使用して、失敗したクエリを「Scheduler」パースペクティブから強制的に実行することもできます (「 ジョブ 」のセクションを参照)。どちらの場合も、オプション [Refresh parameter values on retry] がチェックされている場合は (デフォルト構成)、実行 (再試行を含む) ごとにソースがクエリされ、ブロック内でそれらの値が取得されます。このオプションがチェックされていない場合は、ソースの値が即座に読み取られてキャッシュされ、以降の再試行または特定の状態における実行の開始時に使用されます。どちらの場合も、失敗した値の組み合わせのみが、再試行の実行または特定の状態における新たな実行に使用されます。ソースからの値で 1 がまれにしか変更されない場合、ソースからの値が非常に多い場合は、メモリ消費量を削減するために、このオプションをチェックしたままにしてください。
パラメータ化クエリの構文¶
パラメータ化クエリは、結果としてクエリを表す文字列を生成する変数に依存している式です。変数は、先頭に記号 ‘@' を付加し、変数名を続けて指定します。この名前は、英数字の文字列です (文字、「#」および「_」)。名前に他の文字が含まれる変数は、名前を「@{」と「}」で囲んで指定できます。
注釈
記号「@」、「\」、「^」、「{」、「}」がパラメータ化ステートメントの定数部分で使用される場合は、それらを文字「\」でエスケープする必要があります (例: \@、\\、\^、\{、\})。
パラメータ化クエリで使用される値の構成¶
パラメータ化クエリでは、それらクエリの値を異なるデータソースから取得できます。Scheduler は CSV ファイル、データベースに対するクエリ、または手動で導入した値のリストからデータを取得できます。各タイプのソースに必要な構成は、以下のとおりです。
CSV: 以前に作成した CSV データソース。
DATABASE (JDBC または VDP): 選択する必要のある JDBC または VDP データソース、および指定されたデータベースに対して実行される非パラメータ化クエリ ([Query (non-parameterized)] フィールド)。
LIST: [Separator] フィールドで指定された文字で区切られた、指定する必要のある値のリスト ([Values] フィールド)。
LIST タイプの場合、各タプルは 1 つのフィールドのみを構成するため、値を割り当てることができるのは 1 つの変数のみです。DATABASE ソースと CSV ソースの場合、タプルにはさまざまなフィールドを含めることができるため、値を複数の変数に割り当てることができます。
例: 次のパラメータ化クエリを Virtual DataPort サーバー内の COMPANY
と呼ばれるビューからデータを取得するように構成するとします。
SELECT *
FROM COMPANY
WHERE NAME = '@COMPANYNAME' AND INDUSTRY = '@COMPANYINDUSTRY'
また、それぞれ 2 つのフィールドを持つタプルのリストを含む CSV ファイルにアクセスするためのデータソースを構成するとします。CSV ファイル内のデータは以下のとおりです。
COMPANYNAME;COMPANYINDUSTRY
Denodo;Information Technologies
Acme Drinks;Beverages
その後、すべてのジョブデータを取得するための以下のようなクエリを生成できるように、CSV ソースフィールドを変数に割り当てることができます。
SELECT * FROM COMPANY WHERE NAME = 'Denodo' AND INDUSTRY = 'Information Technologies';
SELECT * FROM COMPANY WHERE NAME = 'Acme Drinks' AND INDUSTRY = 'Beverages';
データソースを追加して構成したら、各ソースが値を返すクエリ変数を、以下のどちらかの方法で定義する必要があります。
暗黙的アソシエーション: このタイプのアソシエーションは、フィールド名とともにタプルを返すソースにのみ適用可能です (ヘッダーを指定する DATABASE ファイルと CSV ファイル)。このような場合、パラメータ化クエリで使用される変数は、データソースによって返されるフィールドのいくつかと同じ名前であると想定でます。
明示的アソシエーション: LIST ソースでは クエリパラメータ バインドを定義できます。
複数のソースが同じ変数に対して値を返すことはできないことを覚えておいてください。
注釈
以前のバージョンの Scheduler では、クエリ内の変数 (クエリパラメータ) とソース内のフィールドの名前 (ソースパラメータ) との間のマッピングを定義する CSV ソースと DATABASE ソースの明示的アソシエーションを作成できました。それらは Scheduler 8.0 ではサポートされていませんが、以前のバージョンからインポートされたジョブ内に存在するマッピングは維持され、このセクションに表示されます。ユーザーはそれらを引き続き使用することも、それらを削除してジョブ構成に必要な変更を加えることもできます。
VDP ジョブにより生成されるデータスキーマ¶
VDP ジョブは、ジョブ自体のフィールドの他、以下のフィールドをジョブのすべてのタプルで返します。
_$job_project (テキスト): ジョブに関連するプロジェクトの名前。
_$job_name (テキスト): ジョブの名前。
_$job (数字): ジョブの ID。
_$job_start_time (数字): ジョブが最初に実行されたときの時間 (ミリ秒単位)。
_$job_retry_start_time (日付): 現在のジョブの実行が開始された時間。
_$job_retry_count (数字): 現在の再試行の実行数。
ジョブが、抽出されたデータを Elasticsearch データソースにエクスポートする場合、以下のフィールドはエクスポートされません。
_$job_project
_$job_retry_start_time
_$job_retry_count
- 1
[Refresh parameter values on retry] オプションがチェックされていて、再試行のたびにソースが変更される場合、再試行された値は失敗した値とは異なることがあります。