17.05 - UPDATE (Upsert形式)および結合インデックス - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)
基本テーブルに行が挿入され、行パーティション結合インデックスでインデックス行の挿入またはインデックス行の更新が行なわれる場合:
  • その結合インデックス行のパーティション式はnullと評価されず、
  • パーティション式はCASE_NまたはRANGE_Nである式で、結果は行の1から65535の間の値になる必要があります。

基本テーブルに行を挿入すると、必ずその基本テーブルで結合インデックスへの挿入または更新が起きるわけではありません。たとえば、CREATE JOIN INDEX文でWHERE句を指定して、WHERE句の条件に一致する行だけがインデックスに挿入されるスパース結合インデックスを作成できます。結合インデックスの行が更新され、更新後にWHERE句の条件に一致しなくなる場合は、その行はインデックスから削除されます。

このためのプロセスは、以下のとおりです。
  1. システムは、行の挿入後にWHERE句の条件についてその真理値を確認します。
  2. システムは条件を評価し、以下のいずれかの操作を行ないます。
  3. 条件がFALSEと評価されると、スパース結合インデックスから行を削除します。
  4. 条件がFALSEと評価されると、スパース結合インデックスに行を保持します。

挿入操作でシステム派生列PARTITIONまたはPARTITION#L1~PARTITION#L62に値およびnullを割当てることはできません。

文字パーティションで定義されたテーブルに挿入するアップサート操作について、照合モードは次の影響を及ぼします。テーブルに、照合順序がMULTINATIONALまたはCHARSET_COLLのいずれかの、文字パーティションを使った非圧縮結合インデックスが定義されていて、結合インデックスが作成されてから照合の定義に変更があった場合、データベースはテーブル内の行の挿入または更新を試みるリクエストをアボートし、挿入または更新によって結合インデックスで行が変更されたかどうかに関係なく、要求元にエラーを返します。

テーブルまたは非圧縮結合インデックスのパーティション式が、Unicode文字式またはリテラルを伴い、テーブルまたは結合インデックスが定義されたときに有効だった文字セットとは異なるUnicode文字セットを持つリリースにまでシステムが戻されると、アップサート操作を行なうテーブルで行の挿入または更新は行なえません。

基本テーブルの行の挿入または更新で、行パーティションを使用する結合インデックスにインデックス行が挿入される結果となり、そのインデックス行のパーティション式の結果が、1とそのレベルに定義されたパーティション数の間の値にならない。

基本テーブルの行の挿入または更新で、行パーティションを使用する結合インデックスでインデックス行の更新が行なわれる結果となり、更新後のインデックス行のパーティション式の結果が、1とそのレベルに定義されたパーティション数の間の値にならない。

基本テーブルの行を更新すると、必ずその基本テーブルで結合インデックスへの挿入または更新が起きるわけではありません。たとえば、CREATE JOIN INDEX文でWHERE句を指定して、WHERE句の条件に一致する行だけがインデックスに挿入されるスパース結合インデックスを作成できます。結合インデックスの行が更新され、更新後にWHERE句の条件に一致しなくなる場合は、その行はインデックスから削除されます。

このアクティビティのプロセスは次のとおりです。

  1. システムは、行の更新後にWHERE句の条件についてその真理値を確認します。
    条件 Result
    FALSE システムはスパース結合インデックスから行を削除します。
    TRUE システムは、スパース結合インデックスで行を維持し、段階bに進みます。
  2. システムは、更新された行でパーティション式の新しい結果を評価します。
    パーティション式 Result
    • nullと評価される場合、または
    • CASE_NでもRANGE_Nでもない式
    行の1から65535までの値になりません。

    システムはリクエストをアボートします。基本テーブルまたはスパース結合インデックスを更新せずに、エラーを返します。

    • 値と評価される場合、および
    • CASE_NでもRANGE_Nでもない式
    行の1から65535まで。

    システムは適切なパーティションに行を格納し、リクエストの処理を続行します。そのパーティションは、行が格納されたパーティションと異なる場合があります。