HASH関数のパーティション式が付いているテーブルと結合インデックスのパーティションを再検証する操作 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

別のプラットフォームへの移行プロセスでは、パーティション テーブルとパーティション結合インデックスが新しいシステムに復元されるか、コピーされた後で、それらのテーブルと結合インデックスのテーブル ヘッダーがデータベースによって再生成されます。

新しいシステムで、別のハッシュ アルゴリズムが使用されているか、16ビットのハッシュ バケットではなく20ビットのハッシュ バケットが設定されている場合は、ハッシュ関数によって返される値の変動によって、パーティション式の評価が変わってしまう可能性があります。また、HASHBUCKET関数を使用してパーティション式を指定したときに、再生成後のテーブル ヘッダーによって、パーティション テーブルとパーティション結合インデックスから不正なクエリー結果が返されることがあります。HASHBUCKET機能の詳細は、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>を参照してください。

以下の手順を使用して、影響を受けたいずれかのテーブルまたは結合インデックスのパーティションを再検証する必要があります。

  1. 移行の前にpre_upgrade_prep.plスクリプトを実行して、この問題によって影響を受けたパーティション テーブルとパーティション結合インデックスを特定します。次に、hashbucket_ppi.rptスクリプトを実行します。

    pre_upgrade_prep.plスクリプトは、移行後に再検証が必要なテーブルまたは結合インデックスを検索して報告するSELECTリクエストを実行します。

    スタンドアロンのSELECTリクエストを実行して、再検証が必要な行を返す場合は、pre_upgrade_prep.plスクリプトが実行するリクエストを複製するために以下のリクエストを実行できます。

         SELECT TRIM(DataBasenamei)||'.'||TRIM(TVMNamei), TableKind
         FROM   DBC.TableConstraints AS tc JOIN DBC.TVM
                                           ON tc.TVMID=TVM.TVMID
                                           JOIN DBC.Dbase
                                           ON tc.DBaseId=Dbase.DatabaseId
         WHERE  ConstraintType = 'Q'
         AND    UPPER(TableCheck) LIKE '%HASHBUCKET%'
         ORDER BY 1;
    再検証するデータベース オブジェクト ステップ
    パーティション テーブル 2.
    パーティション結合インデックス 5.
  2. pre_upgrade_prep.plで特定した各データ テーブルの行を再検証します(結合インデックスの行の場合は、該当しません)。

    データ テーブルの再検証で、行が正しいパーティションに格納されていることを確認するには、save_tableによるnullパーティション ハンドラーを指定する必要があります。

    パーティション結合インデックスの場合にnullパーティション ハンドラー句WITH DELETEまたはWITH INSERT [INTO] save_tableを指定することはできません。

    パーティション テーブルの場合にこのスクリプトが使用する手順を以下にまとめます。

    1. 影響を受けたパーティション テーブルに対してDDLを使用して、保存テーブルを作成します。ただし、save_tableには、パーティションまたはセカンダリ インデックスを指定しません

      このステップが当てはまるのは、パーティションtableを再検証する場合に限られます。パーティション結合インデックスを再検証する場合に、nullパーティション ハンドラーを使用することはできません。

    2. 以下のALTER TABLEリクエストを実行して、table_nameのパーティションを再検証します。
      ALTER TABLE database_name.table_name
      REVALIDATE
      WITH DELETE;

      または

      ALTER TABLE database_name.table_name
      REVALIDATE
      WITH INSERT INTO save_table;

      説明

      database_name
      table_nameを含むデータベースまたはユーザーの名前を指定します。
      table_name
      影響を受けるパーティション テーブルの名前を指定します。
      save_table
      パーティション テーブルの再検証時に作成されるnullパーティションを保存するために作成するテーブル名を指定します。
  3. このステップで実行される処理は、save_tableに行が入っているかどうかによって異なります。
    save_tableの状態 結果
    行が入っていない データ テーブルの再検証プロセスが完了します。
    行が入っている save_tableで各行をどのように処理するかを選択できます。
    • 行を再挿入できるように、元のテーブルのパーティションを再定義します。

    または

    • 行を別のテーブルに保存します。
  4. save_table内の各行が正常に処理されたら、NULLパーティション ハンドラー保存テーブルを削除します。
  5. 影響を受けた各パーティション結合インデックスを削除し、再作成して、パーティション結合インデックスの行を再検証します。