CONTEXT 句¶
CONTEXT 句を使用して、デフォルトで構成した値を無視することなく、特定のクエリが実行されるように構成設定を変更します。
一般的に、 CONTEXT 句は、コンマで区切られた キーと値 のペアを受け取ります。 キー は変更対象の実行特性の名前、 値 はその特性の新しい値です。このキーと値はどちらもリテラルであるため、引用符または二重引用符で囲んで記述する必要があります。キーでは大文字と小文字が区別されませんが、値ではプロパティに応じて大文字と小文字が区別されます。
<context information> ::=
'cache' = { 'on' | 'off' } // 'on' by default
| 'cache_atomic_operation' = { 'true' | 'false' } // 'true' by default
| 'cache_invalidate' =
{ 'matching_rows' | 'matching_pk' | 'all_rows' } // 'matching_rows' by default
| 'cache_invalidate_block_size' = <literal> // 10000 by default
| 'cache_load_on_error' = { 'true' | 'false' } // 'false' by default
| 'cache_preload' = { 'true' | 'false' } // 'false' by default
| 'cache_return_query_results' = { 'true' | 'false' } // 'true' by default
| 'cache_wait_for_load' = { 'true' | 'false' } // 'false' by default
| 'compute_stats_on_target' = { 'true' | 'false' } // 'false' by default except for Impala 3.x Kudu
| 'costoptimized' = { 'on' | 'off' } // 'on' by default
| 'data_movement_bulk_load' = { 'on' | 'off' } // 'on' by default
| 'data_movement_clean_resources' = { 'true' | 'false' } // 'true' by default
| 'data_movement_clean_resources_on_error' = { 'true' | 'false' } // 'true' by default
| 'i18n' = <literal> // e.g. 'es_euro', ...
| 'nodelegateviews' = <literal>
| 'queryTimeout' = <literal>
| 'simplify' = { 'on' | 'off' } // 'on' by default
| 'summary_rewrite' = { 'on' | 'off' } // 'on' by default
| 'swap' = { 'on' | 'off' }
| 'swapsize' = <number>
| 'var <var name>' = <literal>
| USERNAME = <literal>
| PASSWORD = <literal> [ ENCRYPTED ]
| DOMAIN = <literal>
| DATAMOVEMENTPLAN = <data movement plan>
| MPPMOVEMENTPLAN = <MPP movement plan>
| SUBQUERYPLAN = <subquery plan>
| VIEWPROPERTIES = <view properties>
| RETURNQUERYRESULTS = { 'true' | 'false' } // 'true' by default
| IMPERSONATE_USER = '<username>'
| IMPERSONATE_ROLES = '<roles>'
<data movement plan> ::=
[ <view name:identifier> : <data movement view plans> ]+
<data movement view plans> ::=
<data movement view plan>
| [ ( [ <data movement view plan> ] ) ]+
<data movement view plan> ::=
JDBC <data source name:identifier>
| OFF
<MPP movement plan> ::=
[ <view name:identifier> : <MPP movement view plans> ]+
<MPP movement view plans> ::=
<MPP movement view plan>
| [ ( [ <MPP movement view plan> ] ) ]+
<MPP movement view plan> ::=
ON
| OFF
<subquery plan> ::=
{ ANY | HASH | MERGE | NESTED } { ORDERED | REVERSEORDER | ANY }
<view properties> ::=
[ <view name:identifier> : ( <view property> [, <view property> ]* ) ]+
<view property> ::=
'begindelimiter' = <literal>
cache:offの場合、このクエリでは、実行エンジンによってキャッシュエンジンが無効化されるので、データはソースから取得されます。onの場合は、ビューのキャッシュ構成を使用してクエリが実行されます。デフォルト値は
onです。ビューのキャッシュを構成する方法の詳細については「 キャッシュの使用 」を参照してください。
cache_atomic_operation: デフォルトでは、キャッシュエンジンに関して、アトミックに実行される 2 つのタスクがあります。1 つは、キャッシュでデータを無効としてマークするタスクであり、もう 1 つは、キャッシュデータベースに格納されていることからデータを有効としてマークするタスクです。このパラメータがfalseの場合、これら 2 つのタスクの操作はアトミックにはなりません。このパラメータの詳細については、管理ガイドの「 大量のデータセットのキャッシュ 」を参照してください。
デフォルト値:
true。cache_invalidate: このパラメータの動作は、ビューのキャッシュモードに応じて異なります。「部分」キャッシュのビューの場合、このパラメータが
matching_rowsであれば、実行したクエリに関連付けられている「クエリパターン」は無効化され、データはソースから取得されてキャッシュに格納されます。たとえば、以下のクエリを実行するとします。
SELECT * FROM V: 結果はソースから取得され、キャッシュに格納されます。SELECT * FROM V: 結果はキャッシュから取得されます。SELECT * FROM V CONTEXT ('cache_invalidate' = 'matching_rows'): キャッシュされたデータは、「有効時間」に達していない場合でも無効化されます。結果はソースから取得され、キャッシュに格納されます。「部分」キャッシュのビューの場合、パラメータ
('cache_invalidate' = 'all_rows')は使用しないでください。「クエリパターン」の概念については、管理ガイドの「 キャッシュモジュール 」を参照してください。
「全体」キャッシュのビューの場合、キャッシュには自動的には何もロードされません。
CONTEXTにパラメータcache_preloadを指定したクエリの結果をキャッシュにロードする必要があります。cache_invalidateがall_rowsの場合、ビューのキャッシュの内容が削除されてから、クエリの結果がキャッシュに格納されます。cache_invalidateがmatching_rowsの場合、キャッシュの行のうち、クエリのWHERE条件と一致する行のみが無効化されます。cache_invalidateがmatching_pkの場合、VDP はそのプライマリキーが新しい行のプライマリキーに一致するキャッシュ済みの行を更新し、プライマリキーがキャッシュされていない行を挿入します。CONTEXT 句に
cache_invalidateパラメータを指定していない場合は、既存のデータは削除されずにクエリの結果がキャッシュに格納されます。このパラメータの詳細については、管理ガイドの「 既存のデータを無効化してキャッシュをロードする 」を参照してください。
デフォルト値: キャッシュされたデータの無効化なし。
cache_invalidate_block_size: ビューのキャッシュされたデータが非アトミックで無効になっている場合 (CONTEXT句で'cache_atomic_operation' = 'no'を指定している場合)、キャッシュされている行がブロック単位で無効化されます。このパラメータでは、これらのブロックのサイズを設定します。このパラメータの詳細については、管理ガイドの「 大量のデータセットのキャッシュ 」を参照してください。
デフォルト値:
10000。cache_load_on_error: デフォルトでは、失敗したクエリの結果はキャッシュされません。trueを指定すると、失敗したクエリの結果もキャッシュされます。たとえば、和結合ビューを実行する場合に、和結合のブランチのいずれかが失敗しても、他のブランチで得られた結果はキャッシュされるようにするとします。そのためには、このパラメータを
trueに設定してCONTEXT句に追加します。デフォルト値:
false。cache_preload: ビューのキャッシュモードが「全体キャッシュ」または「明示的なロードで部分キャッシュ」の場合は、キャッシュに手動でデータをロードする必要があります。このパラメータの値がtrueの場合は、このクエリの結果がキャッシュに挿入されます。ビューのキャッシュモードが「全体キャッシュ」または「明示的なロードで部分キャッシュ」の場合にのみ使用します。
デフォルト値:
false。cache_return_query_results:falseの場合、クエリは完全に処理されますが、データは返されません。ビューのキャッシュへのロードプロセスを迅速化する場合に、このパラメータを使用します。
詳細については、管理ガイドの「 Full モード 」を参照してください。
デフォルト値:
true。cache_wait_for_load:trueの場合は、データが完全にキャッシュに格納されるまで、クエリは終了しません。falseの場合、クライアントがすべての行を受信したとき、それらの行がまだキャッシュに格納されていなくても、クエリが終了します。このパラメータの詳細については、管理ガイドの「 Full モード 」を参照してください。
デフォルト値: キャッシュモードが「明示的なロードで部分キャッシュ」または「全体キャッシュ」のビューのキャッシュをロードする場合は
true、キャッシュモードが「明示的なロードを使用せずに部分キャッシュ」のビューの場合はfalseとなります。Compute_stats_on_target:trueの場合、Virtual DataPort はリモートテーブルまたはサマリビューを作成した後、Impala でCOMPUTE STATSコマンドを実行します。falseの場合、コマンドを実行しません。デフォルト値: Impala 3.x Kudu を除き、
falseです。costoptimized:offの場合、実行エンジンによって「コストベースの最適化」が無効にされた状態でクエリの実行計画が計算されます。詳細については、管理ガイドの「 コストベースの最適化 」を参照してください。
デフォルト値:
on。DATAMOVEMENTPLAN: このパラメータは、クエリの実行でのデータ移動を定義します。データ移動の詳細については、管理ガイドの「 データ移動 」を参照してください。そのサブセクションの「例」では、
DATAMOVEMENTPLANパラメータの使用例を紹介しています。MPPMOVEMENTPLAN: このパラメータでは、大規模な並行処理データベースへのビューのデータ移動を定義します。並行処理の概要およびこのパラメータの使用例については「 並列処理 」を参照してください。
data_movement_bulk_load: このパラメータがoffになっていて、このクエリで実行エンジンによってデータ移動が実行される場合、実行エンジンではターゲットデータベースの一括ロード API が使用されません。デフォルト値:
on。data_movement_clean_resources、data_movement_clean_resources_on_error、およびdata_movement_clean_resources_on_error: これらのプロパティがデータ移動に及ぼす効果については、管理ガイドの「 データ移動を制御する CONTEXT 句のオプション 」を参照してください。formatted: Virtual DataPort では、CREATE VIEWステートメントの書式設定がデフォルトでは保持されません。保持するには、ステートメントのCONTEXT句にパラメータ'formatted' = 'yes'を追加します。CREATE VIEWステートメントがきわめて長いことから、読み取りやすいように書式設定し、その書式を保持する場合に、この機能が効果的です。派生ビューの VQL を手動で編集すると、このパラメータが Design Studio によって自動的に追加されます。
i18n: クエリの結果のロケール構成。このパラメータは、有効なロケール構成の名前を値として取得します (es_euroなど)。例: 以下のステートメントは、このクエリについてのみ、ロケール構成を
us_pstに設定して、ビューV設定からすべての行を取得します。SELECT * FROM V CONTEXT ('i18n' = 'us_pst')
noDelegateViews: クエリの実行でデータソースに委任されないビューの一覧。データの組み合わせをソースに委任できる場合でも、委任されないようにすることがあります (パフォーマンスが低下する場合やソースのリソースに制限がある場合など)。このような場合は、委任しないビューを指定できるようにすると便利です。
たとえば、同じデータソースから作成した、JDBC の基本ビュー
internet_incとphone_incの結合ビューincidentsがあるとします。クエリ
SELECT * FROM incidentsを実行すると、データベースに JOIN クエリSELECT * FROM phone_inc INNER JOIN internet_inc...が送信されます。SELECT * FROM incidents CONTEXT('nodelegateviews' = 'incidents')を実行すると、Virtual DataPort からデータベースに 2 つのクエリSELECT * FROM phone_incとSELECT * FROM internet_incが送信されます。QUERYTIMEOUT: Virtual DataPort サーバーがクエリの完了を待機する最長時間 (ミリ秒)。この時間が経過すると、Virtual DataPort サーバーによってクエリがキャンセルされます。Virtual DataPort に JDBC または ODBC 経由で接続するすべてのクライアントは、クエリに対してデフォルトのタイムアウトを設定します。このパラメータはクエリのタイムアウトを変更します。コネクションのデフォルトのクエリタイムアウトのパラメータを変更する必要はありません。ユーザーセッションで
ALTER SESSIONコマンドを使用して、すべてのクエリに対してデフォルトのタイムアウトを設定することもできます。0 を指定すると、クエリがキャンセルされなくなります。
simplify:onに設定していると、このクエリに対する自動的な簡素化が実行エンジンによって有効になります。offに設定している場合は、自動的な簡素化は無効になります。詳細については、管理ガイドの「 クエリの自動簡素化 」を参照してください。
デフォルト値:
on。summary_rewrite:onに設定していると、クエリオプティマイザーはこのクエリで使用可能なサマリを使用できます。設定できる値は、on(デフォルト) およびoffです。この機能の詳細については、管理ガイドの「 サマリによるスマートクエリアクセラレーション 」を参照してください。
SUBQUERYPLAN: サブクエリのあるビューでは、サブクエリのCONTEXT句にSUBQUERYPLANパラメータを追加することで、サブクエリのクエリプランを変更できます。詳細については、「 クエリの WHERE 句で使用するサブクエリ 」を参照してください。swap: クエリに対してスワップが有効になっているかどうかを示します。クエリを実行中でも中間結果をスワップできることを指定する場合は、このパラメータをONに設定する必要があります。OFFに設定すると、スワップはできません。詳細については、「 スワップポリシーの構成 」を参照してください。swapSize: このクエリを実行することで取得される中間結果が、ディスクにスワップされずに到達できる最大サイズを示します。その最大サイズ (メガバイト単位) をパラメータとして指定します。SWAP ONオプションを指定している場合にのみ有効です。詳細については、「 スワップポリシーの構成 」を参照してください。USERNAME、PASSWORD、DOMAIN: これら 3 つのパラメータは、WITH PASS-THROUGH SESSION CREDENTIALS句を使用して作成したデータソースであって、タイプが JDBC、Web サービス、BAPI、または多次元のデータソースでのみ考慮されます。Virtual DataPort サーバーとの接続に使用した資格情報以外の資格情報を使用してデータソースのビューにクエリを実行する場合は、これらのオプションを使用します。例: オプション
WITH PASS-THROUGH SESSION CREDENTIALSを指定して JDBC データソースからview1を作成し、以下を実行するとします。SELECT * FROM view1 CONTEXT(USERNAME = 'admin', PASSWORD = 'd4GvpKA5BiwoGUFrnH92DNq5TTNKWw58I86PVH2tQIs/q1RH9CkCoJj57NnQUlmvgvvVnBvlaH8NFSDM0x5fWCJiAvyia70oxiUWbToKkHl3ztgH1hZLcQiqkpXT/oYd' ENCRYPTED)
Virtual DataPort サーバーは、ユーザーが Virtual DataPort サーバーとの接続に使用した資格情報を無視し、ユーザー名
admin``とパスワード ``passwordを使用してビューのデータベースに接続します。トークン
ENCRYPTEDを追加して、必ず暗号化したパスワードを入力する必要があります。パスワードを暗号化するには、ENCRYPT_PASSWORDステートメントを実行します。以下に例を示します。ENCRYPT_PASSWORD 'my_secret_password';
注釈
DOMAINは、NTLM 認証を使用する Web サービスがソースである場合にのみ使用します。var: このパラメータを使用して、関数GETVARを使用するビューの実行で使用する変数の値を設定します。コンテキスト変数の使用方法の詳細については、「 選択条件への変数の追加 (GETVAR および SETVAR) 」を参照してください。例: 以下のクエリは、最大収入が 1000000 であるクライアントを取得します。
SELECT * FROM client WHERE income > GETVAR('_var_client_income_limit', 'int', 500000) CONTEXT('VAR _var_client_income_limit' = '1000000')
VIEWPROPERTIES: クエリツリーの一部を構成するビューの一連のプロパティを指定できます。このオプションでは、ビューに対するWRITE権限が必要です。現時点でサポートされているパラメータはbegindelimiterのみです。このパラメータを区切り形式データファイル (DF) の基本ビューに適用し、正規表現を使用して、区切り形式ソースファイルへのアクセスを開始する位置を動的に選択できます (DF データソースの説明とbegindelimiterパラメータの説明については、「 JSON ソース 」を参照してください)。isdataも指定している場合、区切り文字はデータの一部であると見なされます。例: 定義ツリー
Vの一部を構成する区切り形式ファイルタイプのデータソースに基づいて作成した DF 基本ビューをV2とします。以下のステートメントでは、この区切り形式ファイルから、指定した正規表現に一致する最初のタプルを開始位置としてタプルを取得します (ここでは、文字列05/24/2008で始まるタプルが条件に一致します)。SELECT * FROM V CONTEXT (VIEWPROPERTIES = V2:('begindelimiter' = '05/24/2008(.*)' 'ISDATA'))
RETURNQUERYRESULTS:falseの場合、クエリは完全に処理されますが、データは返されません。このパラメータは、クエリの実行を高速化するために使用します。デフォルト値:
true。IMPERSONATE_USERおよびIMPERSONATE_ROLES: 権限の監査に使用されます。詳細については、「 権限の監査 」を参照してください。
注釈
[View Properties] オプションは廃止されているので、新しいアプリケーションには使用できません。実行時に区切り形式ファイルデータソースの begindelimiter パラメータに値を指定する必要がある場合は、そのようなパラメータの値に補間変数を使用します (管理ガイドの「 補間変数によるパスなどの値 」を参照してください)。
注釈
これらのプロパティとは別に、クエリで指定するビューの選択条件変数に値を設定することもできます。変数を使用した選択条件については、付録「 選択条件への変数の追加 (GETVAR および SETVAR) 」を参照してください。
