- ARRAY
- BYTE
- VARBYTE
- BLOB
- CHARACTER
- VARCHAR
- CLOB
- JSON (次のいくつかの制限があります)
- DATASET (次のいくつかの制限があります)
- TIMEおよびTIME WITH TIME ZONE
- TIMESTAMPおよびTIMESTAMP WITH TIME ZONE
- PERIOD型
- DISTINCT型(次のいくつかの制限があります)
- システム定義のUDT (次のいくつかの制限があります)
CREATE TABLE文またはALTER TABLE文で、COMPRESS USINGオプションとDECOMPRESS USINGオプションを使用して、列に格納されたデータの圧縮や圧縮解除に使用することができます。
例えば、以下のテーブル定義があるとします。
CREATE TABLE Descriptions (d_ID INTEGER ,d_Data VARCHAR(2400) COMPRESS USING Compress_Data DECOMPRESS USING Decompress_Data );
このテーブル定義では、Teradata Databaseに対して、列d_Data内の文字データをCompress_Dataという名前のUDFを使用して圧縮するように指定しています。同様に、圧縮された列d_Dataのデータを圧縮解除するために、Teradata DatabaseはDecompress_DataというUDFを使用します。
Teradataでは、アルゴリズム圧縮に使用できるいくつかの関数を提供していますが、これらの関数が用途に適っていないことがあります。そのような場合は、独自の圧縮UDFを作成してください。
Teradataにより提供される圧縮および圧縮解除関数の詳細について、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>を参照してください。
- ALCを使用して、STRUCTURED型UDTのデータ型を有する列を圧縮することはできません。
- TD_LZ_COMPRESSおよびTD_LZ_DECOMPRESSシステム関数は、Geospatial、XML、およびJSONなどのUDTベースのシステム型を含む、あらゆる大型UDTを圧縮します。ただし、ユーザーが自身の圧縮関数を記述する場合には、以下の制限が適用されます。
- カスタムの圧縮関数を使用してUDTベースのシステム型(ARRAY型およびPERIOD型を除く)を圧縮することはできません。
- カスタムの圧縮関数を使用してUDTベースのシステム型に基づくDistinct UDT(ARRAY型およびPERIOD型を除く)を圧縮することはできません。
- 独自の圧縮関数を作成して、JSON型列でアルゴリズム圧縮を実行することはできません。ただし、TeradataではJSON_COMPRESSおよびJSON_DECOMPRESS関数を提供しており、これらを使用して、JSON型列でALCを実行できます。
- 独自の圧縮関数を作成して、DATASET型列でアルゴリズム圧縮を実行することはできません。ただし、TeradataではSNAPPY_COMPRESSおよびSNAPPY_DECOMPRESS関数を提供しており、これらを使用して、DATASET型列でALCを実行できます。
- テンポラル列(列がSYSTEM_TIME、VALIDTIME、またはTRANSACTIONTIMEとして定義されている)の圧縮には
- ALCを使用できません。
- PERIOD列(SYSTEM_TIME、VALIDTIME、またはTRANSACTIONTIME)から取得されるテンポラルの開始境界および終了境界を定義するDateTime列。
ALCを使用して、非テンポラル列に含まれるPeriodデータ型を圧縮することはできますが、ALCを使用してPERIOD列を圧縮することはできません。
テンポラル テーブルの詳細については、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>と<Teradata Vantage™ - ANSIテンポラル テーブル サポート、B035-1186>を参照してください。
- 行レベル セキュリティ制約列に複数値圧縮やアルゴリズム圧縮を指定することはできません。
アルゴリズム圧縮に使用するUDFはスカラーUDFでなければなりません。
アルゴリズム圧縮のために開発するUDFは、十分にテストをする必要があります。圧縮または圧縮解除アルゴリズムが失敗した場合、圧縮データは回復不能の可能性があるか、破損する可能性があります。