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 を手動で編集すると、このパラメータが管理ツールによって自動的に追加されます。
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) 」を参照してください。