16.20 - UPDATE (ANSI Valid-Timeテーブル フォーム) - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1186-162K-JPN

目的

valid-time期間の一部のみの行を変更するオプションにより、valid-timeテーブルから1つ以上の既存の行を変更します。

構文





valid_time_table
行を変更するvalid-timeテーブル。
FOR PORTION OF
point_in_time_1point_in_time_2で定義される期間内またはこれらの期間と重なるvalid-time期間を持つ変更対象の行を修飾します。
valid_time_period_name
valid-time派生期間列の名前。これは、「VALIDTIME」ではありません。テーブルが定義されたときに派生期間列に割り当てられた名前です。
point_in_time_1point_in_time_2
変更の適用期間を区切ります。
日付またはタイムスタンプ式(DATEまたはTIMESTAMP[(n)] [WITH TIME ZONE]値で評価される定数、スカラーUDF、スカラー副問合わせ、またはビジネス カレンダ関数など)。
この式は、パラメータ化された値およびCURRENT_DATE、CURRENT_TIMESTAMP、TEMPORAL_DATE、またはTEMPORAL TIMESTAMPなどのビルトイン関数を含めた任意の式にすることができます。この式は列を参照することはできませんが、自己格納型の非相関スカラー副問合わせにすることができます。
SET set_clause_list
WHERE search_condition
この構文およびその他の非テンポラルのキーワード、句およびDELETEのオプションの詳細については、SQLデータ操作言語を参照してください。
valid-time期間の開始または終了列構成要素をSET句に含めることはできません。

ANSI準拠

この文は、ANSI SQL:2011に準拠しています。

使用上の注意

MERGE INTO文ではFOR PORTION OF修飾子を使用できません。

ANSI Valid-Timeテーブルの行の更新の例

以下の例では、現在、将来、および履歴行の混合を含むemployee_vtという名前の次のvalid-timeテーブルに対して問合わせが実行されると仮定しています。

 eid ename terms   job_start     job_end
---- ----- ----- ----------- -----------
1002 Ash    TA05  2003/01/01  2003/12/31
1005 Alice  TW10  2004/12/01  9999/12/31
1010 Mike   TW07  2015/01/01  2016/12/31
1001 Sania  TW08  2002/01/01  2006/12/31
1004 Fred   PW12  2001/05/01  9999/12/31
1003 SRK    TM02  2004/02/10  2005/02/09

例: ANSI Valid-Timeテーブルでの簡単なUPDATE

テンポラル修飾のない簡単なUPDATE文は、非テンポラル テーブルのUPDATEと同じように動作し、更新対象の行を完全に更新します。

UPDATE employee_vt SET terms='TA07' WHERE ename='Ash';



SELECT * FROM employee_vt;

 eid ename terms   job_start     job_end
---- ----- ----- ----------- -----------
1002 Ash    TA07  2003/01/01  2003/12/31
1005 Alice  TW10  2004/12/01  9999/12/31
1010 Mike   TW07  2015/01/01  2016/12/31
1001 Sania  TW08  2002/01/01  2006/12/31
1004 Fred   PW12  2001/05/01  9999/12/31
1003 SRK    TM02  2004/02/10  2005/02/09

例: 更新のPAと行のPVの部分が重なるANSI Valid-TimeテーブルでのUPDATE

テンポラル テーブルを使用して、有効期間の一部の行のみを「変更」できます。Teradata Databaseは、自動的な変更を行なうために、行の追加およびvalid-time期間の調整を行ないます。Teradata Databaseは、期間の境界の変更およびテーブルへの新しい行の追加を含む、行のvalid-timeの変更を自動的に処理します。

例えば、Aliceが1年間働いた後、会社がAliceの雇用期間をTW10からPW11に昇格すると仮定します。行の有効期間のその部分だけ、Aliceの行を削除すると、テーブルではAliceに次の2つの行が自動的に作成されます。

UPDATE employee_vt
FOR PORTION OF job_dur FROM DATE'2005-12-01' TO DATE'9999-12-31'
SET terms='PW11'
WHERE ename='Alice';

SELECT * FROM employee_vt WHERE ename=’Alice’;

eid ename terms    job_start     job_end
---- ----- ----- ----------- -----------
1005 Alice PW11   2005/12/01  9999/12/01
1005 Alice TW10   2004/12/01  2005/12/01

ここで、テーブルにはAliceに2つの行が作成され、彼女の雇用期間がどのように変わったか、およびそれぞれの期間に彼女が働いた時間範囲が表示されます。

例: 更新のPAが行のPV内にあるANSI Valid-TimeテーブルのUPDATE

更新のPVが行のPA内にある場合、重複する間有効な行情報の部分のみが更新され、変更の前後に存在した行の部分は別の行としてテーブルに残ります。Fredが2005年に会社での自分の仕事を減らす必要があり、その間の契約期間を変更することに同意すると仮定します。

UPDATE employee_vt
FOR PORTION OF job_dur FROM DATE'2005-01-01' TO DATE'2006-01-01'
SET terms='TW10'
WHERE ename='Fred';

SELECT * FROM employee_vt WHERE ename=’Fred’;

 eid ename term    job_start     job_end
---- ----- ----- ----------- -----------
1004 Fred  TW10   2005/01/01  2006/01/01
1004 Fred  PW12   2001/05/01  2005/01/01
1004 Fred  PW12   2006/01/01  9999/12/31

この場合、テーブルでUPDATEの前にはFredの行は1行で、UPDATEの後には3行になります。この3行で期間PW12で始まり、2005年に始まる1年間にTW10に変化し、2006年にPW12に戻るFredの雇用期間を追跡しています。

これは、1つのvalid-timeテーブルに対して実行された1つのvalid-time UPDATEであったため、新しい行の作成および各行のvalid-timeの調整作業はすべてTeradata Databaseによって自動的に処理されました。