Current Valid-Time問合わせ - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - テンポラル テーブル サポート

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/bud1592002688266.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1182
Product Category
Software
Teradata Vantage

有効時間を含むテーブルに対するcurrent valid-time問合わせは、valid-time次元で有効期間がTEMPORAL_DATEまたはTEMPORAL_TIMESTAMPと重なるオープン行のみを対象にします。このような行を、有効時間を含むテーブルの現在行と呼びます。

有効時間を含むテーブルに対するcurrent valid-time問合わせは、結果セットとしてスナップショット テーブルを生成します。

valid-timeテーブルに対するcurrent valid-time問合わせに適用されるルールは、次のとおりです。
  • セッションvalid-time修飾子が暗黙的または明示的にcurrentに設定されている場合、テンポラル修飾子を指定していない従来型のSELECT文は、valid-timeテーブルのvalid-time次元でcurrentになります。問合わせでvalid-timeテーブルを参照する場合には、SELECTで任意選択のCURRENT VALIDTIMEを指定できます。
  • current問合わせでは、その問合わせ内でvalid-time列を参照できます。派生PERIOD列を使用して定義されたvalid-time列に対しては、問合わせは有効時間を定義する構成要素列を参照できます。valid-time列は従来型のPERIOD列として処理され、派生したvalid-time列では、構成要素列が従来型のDateTime列として処理されます。すべての条件は、valid-time列に指定した条件も含めて、現在行にのみ適用されます。テンポラル列の参照を条件内に指定すると、出力をさらに詳細なフィルタに掛けることができます。
  • 射影リストのアスタリスク( * )には、非テンポラル列のみが含まれます。
  • current問合わせの処理は次のとおりです。
    1. 問合わせに指定した各valid-timeテーブルの現在行を抽出してから、その問合わせを非テンポラル テーブルに対して指定した問合わせと同様に扱います。結果としてのテーブルは、射影リストにvalid-time列が含まれているかどうかに関係なく、valid-time次元が含まれない非テンポラル テーブルになります。
    2. 有効時間を含まないテーブルに対して発行された従来型の問合わせと同様に、この問合わせを実行します。

current問合わせ処理は有効時間のスナップショットを対象とするため、結合や集約などのすべての操作は従来型の問合わせの操作と同じになります。

current問合わせでは、同じまたは異なるvalid-time粒度の2つのテンポラル テーブルの結合をサポートしています。

問合わせに二重テンポラル テーブルまたはtransaction-timeテーブルが関与する場合は、transaction-time次元に適用される追加情報に関する以下のトピックを参照してください。
CURRENT DMLを変更すると、並行トランザクションにおける逐次性の問題が発生することがあります。これらの問題を避ける方法の詳細は、CurrentテンポラルDMLに付随する潜在的な同時並行性の問題を参照してください。

CURRENT VALIDTIME SELECTの動作の変更

CURRENT VALIDTIME SELECT文は、通常は有効時間がTEMPORAL_TIMESTAMPと重なる選択行を対象にします。SELECT文を含むトランザクション内では、TEMPORAL_TIMESTAMPはトランザクションが開始された時刻を反映し、その時刻はトランザクションが完了するまで不変に保たれます。

非常に長いトランザクションには、この動作は好ましくありません。そのトランザクションの開始後に挿入または変更された行が選択されなくなってしまうからです。そのような行は、valid-time期間の開始値がTEMPORAL_TIMESTAMPより後になるため、現在行ではなく将来行と見なされてしまいます。たとえば、トランザクションの開始後に他のユーザーがテーブルに行を追加したときに、そのトランザクションがCURRENT VALIDTIME SELECTを実行すると、新しい行は選択されません。

次に示す文では、CURRENT VALIDTIME SELECT文の動作を変更して、行の有効時間とCURRENT_TIMESTAMPが重なるかどうかに応じて、行を選択対象とするようにします。これにより、SELECTは最新のタイムスタンプを持つ行を照合できるようになります。

DIAGNOSTIC SET CURRENT VALIDTIME SELECT AS LATEST [ NOT ] ON FOR SESSION

CURRENT_TIMESTAMPはトランザクションを開始した時刻に固定されることがないため、SELECT文が含まれたトランザクションの開始後に追加または変更された最新の行も、CURRENT VALIDTIME SELECT文で照合されるようになります。

この設定は、SELECT文、SELECT Subquery 、SELECT派生テーブル、およびそれらのSELECT文内のビューに作用します。その他のタイプのDMLやsubquery 、派生テーブル、およびそれらのDML文内のビューには効果がありません。この設定は、NOT形式の文を使用して明示的に無効にするまで有効になります。

キャッシュされたSELECT文には、この診断文は作用しません。