Teradataシステムでは、幅広い圧縮方法を使用します。複数値圧縮と行圧縮はロスレスです。元のデータを圧縮形式から正確に再構築できます。アルゴリズム圧縮は、ロスのないプロセスまたはロスのあるプロセスになることができます。
複数値圧縮では、列値が行自体ではなくテーブル ヘッダーに一度だけ格納され、行ヘッダー内の一連のプレゼンス ビットを使ってこれらの値がポイントされます。この値圧縮の方法は、ディクショナリ インデックス付けといいます。<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
- すべての数値型
- DATE
- CHARACTERおよびCHARACTER SET GRAPHIC
- VARCHARおよびCHARACTER SET VARGRAPHIC
- BYTE
- VARBYTE
- このリストに挙げられているデータ型のいずれかの事前定義に基づくDISTINCT型UDT。
- 現在の行にある値へのポインタ参照を使用
- 複数値にある値へのポインタ参照を使用
行が初めて保存されるときは、値圧縮のコストは小さく、既存の非圧縮列を圧縮列に変換するときにコストがかかるのも1回だけです。ただし、クエリーの場合、小さいテーブルに対して行なわれたクエリーでも、複数値圧縮によってテーブルのサイズが減るのであれば、この圧縮方法は最終的に有益な方法です。<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
複数値圧縮スプールの場合、列が何の式も適用されずにスプールにコピーされると、Teradata Databaseは圧縮データのみをスプールにコピーして、CPUコストとI/Oコストを節約します。スプールにコピーされると、実テーブルとまったく同じ方法で圧縮作業が行われます。システムはスプール上で動作しているものの、メモリに常駐した、スプールのテーブル ヘッダーには圧縮された複数値リストがあります。
標準のデフォルトの複数値圧縮を使用すると、列ごとに、nullおよび255個までの固有値を圧縮できます。テーブルごとに無制限の数の列に対して値を圧縮できます。テーブルごとに圧縮可能な列の数に一定の制限があるわけではありませんが、実際に圧縮可能な列の数は、他のオプションのテーブル特性によって消費されない、テーブル ヘッダーで使用可能な容量の関数です。Teradata Vantage™ - データベースの設計、B035-1094を参照してください。
複数値圧縮のタイプ | 説明 |
---|---|
単一値 | 値が明示的に指定されない場合、デフォルトはnullです。 |
複数値 | すべての値を明示的に指定する必要があります。デフォルトはありません。 列に圧縮される値を指定するための基本的な順序付けはありません。 列の圧縮複数値に同じ値またはNULLを複数回指定することはできません。 |
複数値圧縮は、テーブル列に対して定義されると、テーブルからのデータを含むスプールのプロパティとして保持されるため、圧縮はディスク上に格納される単なるデータのプロパティではありません。
複数値圧縮容量
テーブル内の多数の値に対して複数値圧縮を適用すると、容量に関して以下の問題が生じることがあります。
テーブル ヘッダーのオーバーフロー
圧縮された複数値情報はテーブル ヘッダーに格納され、他のTeradata Database行と同様、テーブル ヘッダー行の最大長は64 KBです。nullの格納は、行ヘッダーのプレゼンス ビットで示され、テーブル ヘッダーのサイズには影響を与えません。テーブル ヘッダーの最大サイズは1 MBです。テーブル ヘッダーのオーバーフローが発生した場合は、より小さい圧縮列値でCREATE TABLE文を再実行する必要があります。
複数値圧縮された列を変更する方法の詳細については、列の複数値圧縮の追加または変更に関するルールを参照してください。
テーブル ヘッダー行の長さには、パーティション化やUDT列など、いくつかの要素が関係しているので、オーバーフローを回避するための確実な指針を示すことはできません。テーブル ヘッダーの詳細については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
ディクショナリ キャッシュのオーバーフロー
これが生じると、Teradata Databaseは3930エラーを報告します。ディクショナリ キャッシュのサイズを現行値から最大サイズの1 MBに増やしてください。ディクショナリ キャッシュのサイズのデフォルト値も1 MBです。したがって、何らかの理由でディクショナリ キャッシュのサイズが減らされた場合にのみ、サイズを増やすことが必要になります。