列パーティション テーブルに列を追加する操作 - 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

列パーティション テーブルに新しい列を追加する操作に関するルールと制約事項を以下にまとめます。

その列が現時点で存在しない必要があります。列はシステムによって、その単一列で構成される新しい列パーティションとして追加されます。

列のグループはシステムによって、それらの列で構成される新しい列パーティションとして追加されます。

KANJI1サーバーの文字セットは使用不可

列パーティション テーブルに、サーバー文字セットがKANJI1になっている列を追加することはできません。

代わりにUNICODEサーバー文字セットを使用する必要があります。

ALTER TABLE文ごとの列への単一の変更

1つのALTER TABLE文で列を複数回変更することはできません。

INTO句および列パーティション テーブル

ALTER TABLE文のADD句でINTO句を指定できるのは、変更対象のオブジェクトが列パーティション テーブルの場合に限られます。

INTOオプションを指定しないで、列パーティション テーブルに現時点で存在しない1つの列(括弧で区切らない列)を追加する場合、その列は、その列だけの新しい列パーティションとして追加されます。システムは、現時点で使用されていない新しい列パーティションにパーティション番号を割り当てます。システムは、新しい列パーティションのパーティション形式を決定し、自動圧縮でその列パーティションを定義します。

INTO句オプションを指定するかどうかとは無関係に、システムは常に、テーブルのすべての列を選択するときに使用するアスタリスク(*)の指定にかかわる最後の列として新しい列を追加します。

ALTER TABLE文を使用して列と列パーティションのいずれかまたは両方を追加することで結合インデックスの定義を変更することはできません。

INTO句では、テーブルに存在しない列名を指定することはできません。

新しい列を追加して、その列を同じALTER TABLE文のINTO列で指定することはできません。

1つの列または一群の列でINTO句を指定した場合、追加する列セットは、INTO句のcolumn_nameで指定した列が含まれている列パーティションの一部になります。

列パーティションですでに定義されている列を同じパーティションに追加することはできません。

列パーティションですでに定義されている列を別の列パーティションに追加することはできません。

列パーティション番号

列パーティションに列を追加すると、Teradata Databaseは、変更後の列パーティションに新しい列パーティション番号を割り当てます。

列パーティションに列を追加しても、定義済みの列パーティションの数(内部使用の2つの列パーティションを含む)、追加できる列パーティションの数、列パーティションの最大数、列パーティションの最大番号に影響はありません。

INTOを使用しない、単一列パーティションの追加

INTO句を指定しないで、列パーティション テーブルに現時点で存在しない1つの列を追加する場合、その追加する列は、その列だけの新しい列パーティションとして追加されます。

Teradata Databaseは、その新しい列パーティションに、現時点で使用されていない列パーティション番号を割り当てます。使用できる列パーティション番号が存在しない場合、Teradata Databaseはリクエスト側にエラーを返します。

新しい列の形式は、システム設定形式であり、デフォルトでは自動圧縮形式として定義されます。

INTOが先に出現しない場合、テーブルに追加される新しい列パーティションに対してAUTO COMPRESSまたはNO AUTO COMPRESSを指定できます。

INTOを使用せずに、列のグループをパーティションとして追加

INTO句を指定しないが、1つ以上の列のグループを括弧で区切って追加する場合:

  • 変更対象のオブジェクトは、列パーティション テーブルでなければなりません。列パーティション結合インデックスを変更して列や列パーティションを追加することはできません。
  • 一群の列として、テーブルで現在定義されている列を指定することはできません。
  • 列のグループは、これらの列からなる新しい列パーティションとして追加され、新しい列パーティション番号を割り当てます。

    使用できる列パーティション番号が存在しない場合、Teradata Databaseはリクエスト元にメッセージを返します。

  • COLUMN形式を指定すると、Teradata Databaseは、1つ以上の列パーティション値をコンテナと呼ばれる1つの物理行に格納し、行ヘッダーを圧縮します。

    ROW形式によるグループ化を指定すると、Teradata Databaseは、1つの列パーティション値だけを1つの物理行に副行として格納し、行ヘッダーを圧縮しません。これは、Teradata Databaseで通常使用される形式と同じです。

    COLUMN形式もROW形式も明示的に指定しない場合、またはSYSTEM形式を明示的に指定した場合、Teradata Databaseが列パーティションでCOLUMN形式を使用するか、ROW形式を使用するかを決定します。

    列パーティション値は、特定のテーブルの行の列パーティションに含まれている各列の値で構成されます。

  • AUTO COMPRESSまたはNO AUTO COMPRESSのいずれかを指定する場合、Teradata Databaseはその指定に応じて、適切な自動圧縮を指定の物理行に適用するかどうかを決定します。ただし、ユーザー指定の圧縮はすべて適用し、COLUMN形式の列パーティションの場合は、行ヘッダー圧縮を物理行に適用します。

列パーティションのデフォルトの形式

追加する列パーティションの列パーティション値のサイズや他の要素(列パーティションの列パーティション値が固定長か可変長か、列パーティションが単一列パーティションか複数列パーティションかなど)に基づいて、デフォルト形式を選択します。

原則として、狭い列パーティションにはCOLUMN形式が、広い列パーティションにはROW形式が割り当てられます。

追加した列パーティションで選択された形式を確認するには、HELP COLUMN文を実行するか、該当するデータ ディクショナリ ビューに対するクエリーを実行します。列パーティションの形式を明示的に指定することもできます。

列パーティションに列セットを追加する場合に、そのパーティションがシステム設定のCOLUMNまたはSYSTEMパーティション形式になっていると、Teradata Databaseは、その列パーティション形式を再設定します。その形式の選択は、列パーティションに含まれる変更後の列セットの列パーティション値のサイズや他の要素(パーティションの列パーティション値が固定長か可変長かなど)に基づきます。

列を列パーティションに追加し、パーティションにユーザー指定のCOLUMN、ROW、またはSYSTEM形式がある場合、変更された列パーティションの形式は変更されません。

同じALTER TABLE文における列パーティションの削除と追加

同じALTER TABLE文で列パーティションの削除と追加を行なうと、新しい列パーティションが追加される前に指定の列パーティションが削除されます。

定義された列パーティションの数

列パーティションを追加すると、定義済みの列パーティションの数が1つ増え、追加できる数が1つ減ります(定義済みの列パーティションの数の中には、内部で使用する2つの列パーティションが常に含まれています)。

列パーティションの最大数と列パーティションの最大番号に影響はありません。

列パーティションのCOLUMN、ROW、またはSYSTEM形式

1つの列パーティションの形式は、COLUMN、ROW、またはSYSTEMのいずれかになります。すべての形式を組み合わせることはできません。ただし、列パーティション オブジェクトの各種列パーティションを別々の形式にすることは可能です。

列パーティション テーブルの列パーティションは、すべてをCOLUMN形式、ROW形式、SYSTEM形式にすることも、COLUMN、ROW、またはSYSTEM形式の組み合わせにすることもできます。列パーティション テーブルまたは結合インデックスの列パーティションは、すべてをコンテナ、副行にすることも、コンテナと副行の組み合わせにすることもできます。

列パーティション番号が1より小さくなることはありません。また、テーブルや結合インデックスの列パーティションの最大番号より大きくなることもありません。列パーティション番号は、オブジェクト用に列パーティションを定義した順序に対応するとは限りません。

INTO句を指定するかどうかに関係なく、テーブルの列すべてを選択するときに使うアスタリスク(*)の指定用の最後の列として、常に1つの列が追加されます。