17.10 - 更新可能現在日付および更新可能タイムスタンプに基づくCASE_Nパーティション式の最適な調整 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)
次のルールと指針は、ALTER TABLE TO CURRENT文を使用して最適に調整できるCASE_Nパーティション式を指定するときに適用されます。ALTER TABLE TO CURRENTを参照してください。
  • DATE、CURRENT_DATE、またはCURRENT_TIMESTAMPは、CASE_N条件式の片側にのみ指定する必要があります。CASE_Nの指定は、式のLHSまたはRHSのいずれかで最適となる可能性がありますが、両方の側に指定した場合、調整は最適化できません。

    この最適化によって、Vantageは調整中に一部のパーティションをスキップできます。ただし、条件式の両側にDATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を指定した場合、Vantageはテーブルのすべての行をスキャンして、調整の必要がある行を見つける必要があります。

  • Vantageは、DATE値、CURRENT_DATE値、またはCURRENT_TIMESTAMP値が調整された後で、現在のパーティションに行が残っているかどうかを判別できる場合、調整中にパーティションをスキャンしません。
  • CASE_N式でNO CASEを指定し、複数の条件式でDATE関数またはCURRENT_DATE関数を指定するとき、Vantageは、CURRENT_DATEまたはCURRENT_TIMESTAMPを使用して以前に指定した条件式が連続していない場合にのみ、調整中にNO CASEパーティションをスキャンします。

    DATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を使用して1つの条件式のみを指定するとき、Vantageは、この条件式に対応するパーティションがスキップされた場合にのみ、NO CASEパーティションをスキャンします。

    例えば、次の式は、すべてこの最適化を利用できます。
    • CASE_N (j ≥ CURRENT_DATE, NO CASE)

      この場合、Vantageは調整中に2番目のパーティションの行をスキャンしません。

    • CASE_N(j ≥ CURRENT_DATE           /* Current quarter */,

      j ≥ CURRENT_DATE - INTERVAL '3' MONTH

      AND j <  CURRENT_DATE               /*previous quarter*/,

      NO CASE                     /* old quarters */)

      この場合、式がすべて近接しているため、Vantageは、調整中に「old quarters」という注釈が付けられている最後のパーティションの行をスキャンしません。

    • CASE_N式でNO CASEを指定し、複数の条件式でCURRENT_DATEを指定した場合、Vantageは調整中にNO CASEパーティションをスキャンします。

      DATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を使用して1つの条件式のみを指定するとき、Vantageは、DATE、CURRENT_DATE、またはCURRENT_TIMESTAMPを使用して最初に指定されている条件式が連続していない場合にのみ、調整中にNO CASEパーティションをスキャンします。

      例えば、以下の式では、そのような最適化が提供されます。

      CASE_N(j >= CURRENT_DATE /* current quarter */

      j ≥ CURRENT_DATE = INTERVAL ' 3 ' MONTH

         AND j < CURRENT_DATE /* previous quarter */, NO CASE)

      この場合、Vantageは、調整時に「previous quarter」というラベルの付いた2番目のパーティションの行をスキャンしません。

      CASE_N(j ≥ CURRENT_DATE   /*current quarter*/,

      j ≥ CURRENT_DATE - INTERVAL '3' MONTH

      AND j < CURRENT_DATE    /*previous quarter*/

      NO CASE                 /*old quarters*/)

      この場合、VantageはNO CASEパーティションをスキャンします。2番目の式と3番目の式の間は3か月空いているため、これは連続していない例です。

      CASE_N(j ≥ CURRENT_DATE               /*current quarter*/,

      j ≥ CURRENT_DATE - INTERVAL '3' MONTH

      AND j <  CURRENT_DATE               /*previous quarter*/,

      j <  CURRENT_DATE-INTERVAL '3' MONTH /*old quarter*/,

      NO CASE)

      この場合、Vantageは調整中にパーティション1と2をスキャンしますが、パーティション3と4はスキップします。式1、2、および3はすべて近接しているため、NO CASEパーティションはスキップされます。

    • CASE_N式でUNKNOWNパーティションを指定する場合、Vantageは調整中に常にそれをスキャンします。

      NO CASE OR UNKNOWNパーティションを指定した場合にも、このようになります。

    • Vantageは、DATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数のいずれも指定しない条件式を使用して定義されたパーティションをスキャンしません。ただし、DATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を指定する条件式の前に定義されている場合を除きます。その場合は、スキャンが実行されます。

      DATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を指定する条件式を定義する前に、DATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を指定しないすべての条件式を指定する必要があります。

      例えば、次の式は、すべてこの最適化を利用できます。

      • CASE_N(j ≥CURRENT_DATE /* current quarter */,

        j ≥CURRENT_DATE - INTERVAL '3' MONTH AND j < CURRENT_DATE

        /* previous quarter */, NO CASE)

      • CASE_N(j ≥CURRENT_DATE /* current quarter */,

        j ≥CURRENT_DATE-INTERVAL '3' MONTH AND j < CURRENT_DATE

        /* previous quarter */,

        j <CURRENT_DATE-INTERVAL '6' MONTH, /* old quarters */ NO CASE)

        この連続していないケースでは、システムはNO CASEをスキャンします。2番目と3番目の式の間に3か月の間隔があります。