17.05 - COMPRESS constant - 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-1144-175K-JPN
Language
日本語 (日本)

列内の固有値のセットに対して複数値圧縮を指定します。

COMPRESSを使用すると、圧縮される値が割り当てられる行の割合に応じて領域を節約できます。

複数値圧縮は、すべての数値型および次の事前定義データ型に指定できます。
  • BYTE
  • VARBYTE
  • DATE
  • CHARACTER
  • VARCHAR
  • GRAPHIC
  • VARGRAPHIC
  • TIME
  • TIME WITH TIME ZONE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
複数値の圧縮は、事前定義された以下のデータ型に基づくDISTINCT型UDTで定義された列に対して指定することができます。
  • すべての数値型
  • DATE
  • CHARACTERおよびGRAPHIC
  • VARCHARおよびVARGRAPHIC
  • BYTE
  • VARBYTE
複数値の圧縮は、次のデータ型で定義された列ではサポートされません。
  • BLOB
  • CLOB
  • ARRAY/VARRAY
  • STRUCTURED型UDT
  • Period
  • XML
  • Geospatial
  • JSON
  • DATASET
複数値圧縮は、以下ではサポートされていません。
  • テーブルに対するプライマリ インデックス列セットのメンバーである任意の列。
  • 行レベル セキュリティ制約列。
  • パーティション列。

圧縮属性が同じソース テーブルとターゲット テーブルには、高速パスのINSERT…SELECTを使用できます。COMPRESS属性の定義が一致していない列は、高速パスのINSERT … SELECT操作に加えることはできません。COMPRESS属性の定義が一致しない圧縮列を含むターゲット テーブルに対してINSERT…SELECTを実行すると、最適化ルーチンが作成するアクセス計画には、高速パスの最適化が指定されなくなります。

通常は、複数値圧縮によってパフォーマンスが向上すれば、高速パスのINSERT … SELECTを利用できないコストが相殺されます。

ALTER TABLEを参照してください。

複数値圧縮とアルゴリズム圧縮は、どちらの順序で指定してもかまいません。

複数値圧縮の詳細は、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

COMPRESS属性の詳細について、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。

constant
指定した値または値のリストが圧縮されます。
この値の制限については、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。
NULL
NULLは列に対して圧縮されます。
次のルールが適用されます。
  • 列がNOT NULLとして定義されている場合、NULLを指定できません。
  • LOBに基づくUDTのNULLは圧縮できません。
  • 1つの列につきNULLは1度しか指定できません。
列にNOT NULLの制約が指定されている場合、複数値の圧縮リスト内にリテラルのNULLを指定することはできません。

例: 複数値圧縮の指定

次の例は、Smith、Wong、およびRodriguezのすべてのemp_name値、および1972-02-29、1976-02-29のすべてのDOB値を圧縮します。
    CREATE TABLE employee (
      emp_no   INTEGER       NOT NULL,
      emp_name CHARACTER(30) NOT NULL COMPRESS ('Smith', 'Wong',
                                                'Rodriguez')
       ...
      dob      DATE          COMPRESS (NULL, DATE '1972-02-29',
                                             DATE '1976-02-29')
       ...);

例: 複数値の圧縮の明示的列データ型と暗黙的データ型との矛盾

この例は、圧縮される値を含む列に指定された明示的な型とは異なる暗黙的なデータ型で圧縮数値データ値を指定するときの問題を示しています。この問題は、DECIMAL/NUMERICデータ型とREAL/FLOAT/DOUBLE PRECISIONデータ型の間の双方向変換時に制限されます。

この例では、列は明示的FLOATデータ型で定義されているが、圧縮値は暗黙的DECIMALデータ型で指定されている場合を示しています。

     CREATE TABLE comptest, NO FALLBACK (
       col_1 INTEGER NOT NULL,
       col_2 FLOAT COMPRESS 0.58)
     PRIMARY INDEX (col_1);

この例では、列は明示的DECIMALデータ型で定義されているが、圧縮値は暗黙的FLOATデータ型で指定されている場合を示しています。

     CREATE TABLE comptest3, NO FALLBACK (
       col_1 INTEGER NOT NULL,
       col_2 DECIMAL(3,2) COMPRESS 0.07E0 )
     PRIMARY INDEX (col_1);

列のデータ型(DECIMAL)が指定されている圧縮値の暗黙的データ型(FLOAT)と異なるため、この例はエラーを返します。