AnalyticDB for PostgreSQL は、固定精度と整数ベースのストレージを組み合わせた FIXNUMERIC データ型をサポートしています。計算負荷の高いシナリオでは、FIXNUMERIC 型はネイティブの NUMERIC 型または DECIMAL 型よりも大幅にパフォーマンスが優れており、特定の範囲内でロスレス精度を維持しながら、集約操作と基本的な算術演算のパフォーマンスを向上させます。
概要
FIXNUMERIC は、AnalyticDB for PostgreSQL の固定精度10進数データ型であり、ネイティブの NUMERIC 型または DECIMAL 型よりも優れたパフォーマンスと効率的なストレージを提供するように設計されています。 NUMERIC 型または DECIMAL 型の高パフォーマンスサブセットとして、FIXNUMERIC は、整数ベースのストレージメカニズム(INT 64 および INT 128)とプリセットスケール(小数点以下の桁数)を使用して、10進数を整数にマッピングします。 FIXNUMERIC 型は、従来の NUMERIC 型または DECIMAL 型の10進計算をシミュレートする際のオーバーヘッド、および浮動小数点計算におけるバイナリ表現エラーによって引き起こされる精度の損失を防ぎます。 FIXNUMERIC 型は、高精度計算、制御可能なデータ範囲、高パフォーマンス、および大容量のディスク容量を必要とするシナリオに適しています。
FIXNUMERIC 型には、2つのモードがあります。
FIXNUMERIC:(19,6)の固定精度で 64 ビット整数に基づいて実装されます。NUMERIC(19,6)と同等の、小数点以下 6 桁を含む最大 19 桁をサポートします。FIXNUMERICは、パフォーマンスとストレージ効率のバランスをとるために、小規模および中規模のデータ計算シナリオに適しています。FIXNUMERIC128:(38,10)の固定精度で 128 ビット整数に基づいて実装されます。NUMERIC(38,10)と同等の、小数点以下 10 桁を含む最大 38 桁をサポートします。FIXNUMERIC128は、広範囲で高精度のデータ計算を必要とするシナリオに適しており、特に大規模データ分析シナリオに優れています。
NUMERIC 型との比較
機能 | FIXNUMERIC または FIXNUMERIC128 | NUMERIC |
精度 | 固定(デフォルトでは小数点以下 6 桁または 10 桁) | 可変 |
範囲 | 制限あり(64 ビットまたは 128 ビット整数に基づく) | ほぼ無制限 |
パフォーマンス | 高(ネイティブ CPU 命令セットに基づく操作による) | 低 |
丸め方法 | ゼロ方向への丸め | 最も近い値への丸め |
NaN サポート | サポートされていません | サポートされています |
制限
fixnumeric 拡張機能は、V7.2.1.1 以降の AnalyticDB for PostgreSQL V7.0 インスタンスでのみサポートされています。
説明AnalyticDB for PostgreSQL インスタンスのマイナーバージョンの確認方法については、「インスタンスのマイナーバージョンの表示」をご参照ください。インスタンスが上記の要件を満たしていない場合は、インスタンスのマイナーバージョンを更新してください。詳細については、「UpgradeDBVersion」をご参照ください。
サーバーレスモードの AnalyticDB for PostgreSQL インスタンスは、fixnumeric 拡張機能をサポートしていません。
FIXNUMERIC型とFIXNUMERIC128型には、固定の値の範囲があります。これらの 値の範囲 を超えると、オーバーフローエラーが発生します。ネイティブの
DECIMAL型またはNUMERIC型とは異なり、FIXNUMERIC型は、列の作成時に固定スケールを持ちます。スケールは基盤となるレベルであらかじめ設定されているため、テーブルの作成時に明示的にスケールを定義する必要はありません。
インストールとアンインストール
fixnumeric 拡張機能は、GUI ベースのインストールをサポートしていません。 fixnumeric 拡張機能をインストールするには、チケットを送信 してください。拡張機能をインストールした後、AnalyticDB for PostgreSQL インスタンスを再起動する必要があります。 fixnumeric 拡張機能をアンインストールするには、チケットを送信してください。
例
FIXNUMERIC 型は、AnalyticDB for PostgreSQL の他のデータ型と同様に使用でき、FLOAT や DOUBLE PRECISION などの浮動小数点型をシームレスに置き換えることができます。
手順 1:テーブルを作成し、テーブルにデータを書き込む
FIXNUMERIC データ型を使用して test_t という名前のテーブルを作成し、テストデータをテーブルに書き込みます。
CREATE TABLE test_t(a float, b numeric(14,6), c fixnumeric, d fixnumeric128);
INSERT INTO test_t SELECT v+0.1,v+0.1,v+0.1,v+0.1 FROM generate_series(1,1000) v;手順 2:インデックスを作成する
FIXNUMERIC 型はインデックスをサポートしています。 test_t テーブルのインデックスを作成します。
CREATE INDEX ON test_t (c);
CREATE INDEX ON test_t (d);手順 3:データをクエリする
対応する列の
SUM値をクエリします。SELECT SUM(a), SUM(b), SUM(c), SUM(d) FROM test_t ;FLOAT型は、精度が低い近似値を返します。NUMERIC型、FIXNUMERIC型、およびFIXNUMERIC128型は、正確な値を返します。sum | sum | sum | sum --------------------+---------------+-------------------+------------------- 500600.00000000175 | 500600.000000 | 500600.0000000000 | 500600.0000000000 (1 row)対応する列の
AVG値をクエリします。SELECT AVG(a), AVG(b), AVG(c), AVG(d) FROM test_t;FLOAT型は、近似値を返します。NUMERIC型、FIXNUMERIC型、およびFIXNUMERIC128型は、正確な値を返します。avg | avg | avg | avg -------------------+----------------------+------------+---------------- 500.6000000000017 | 500.6000000000000000 | 500.600000 | 500.6000000000 (1 row)
サポートされる関数
FIXNUMERIC 型は、高い互換性とスケーラビリティを提供します。 SUM、AVG、MIN、MAX などのすべての集計関数をサポートし、ネイティブの DECIMAL 型または NUMERIC 型をサポートするほとんどの関数と互換性があります。次の表に、サポートされる関数を示します。
関数名 | 説明 |
| 合計値、平均値、最小値、または最大値を計算します。 |
| 値が範囲内にあるかどうかを確認します。 |
| 絶対値を返します。 |
| パラメーター値の符号(-1、0、+1 など)を返します。 |
|
|
| 数値を特定の小数点以下の桁数に切り捨てます。 |
| 数値を最も近い整数に切り上げます。 |
| 数値を最も近い整数に切り上げます( |
| 数値を最も近い整数に切り捨てます。 |
| 加算、減算、乗算、または除算を実行します。 |
| 比較演算子(等しい、より大きい、より小さい、以下、以上、等しくないなど)として機能します。 |
| 剰余を返します。 |
|
|
|
|
|
|
|
|
|
|
| 小数点以下の桁数を返します。 |
|
|
|
|
|
|