AnalyticDB for PostgreSQL mendukung tipe data FIXNUMERIC, yang menggabungkan presisi tetap dengan penyimpanan berbasis integer. Dalam skenario komputasi-intensif, tipe FIXNUMERIC lebih unggul dibandingkan tipe NUMERIC atau DECIMAL asli, menawarkan kinerja lebih baik untuk agregasi dan operasi aritmatika dasar sambil mempertahankan presisi tanpa kehilangan dalam rentang tertentu.
Pengenalan
FIXNUMERIC adalah tipe data desimal presisi tetap di AnalyticDB for PostgreSQL, yang dirancang untuk memberikan kinerja lebih baik dan penyimpanan lebih efisien dibandingkan tipe NUMERIC atau DECIMAL asli. Sebagai subset berkinerja tinggi dari tipe NUMERIC atau DECIMAL, FIXNUMERIC memetakan desimal ke integer menggunakan mekanisme penyimpanan berbasis integer (INT 64 dan INT 128) serta skala preset (jumlah tempat desimal). Tipe FIXNUMERIC menghindari overhead simulasi perhitungan desimal pada tipe NUMERIC atau DECIMAL tradisional, serta mencegah kehilangan presisi akibat kesalahan representasi biner dalam perhitungan titik mengambang. Tipe FIXNUMERIC cocok untuk skenario yang membutuhkan perhitungan presisi tinggi, rentang data terkendali, kinerja tinggi, dan ruang disk besar.
Tipe FIXNUMERIC memiliki dua mode:
FIXNUMERIC: Diimplementasikan berdasarkan integer 64-bit dengan presisi tetap(19,6), mendukung hingga 19 digit termasuk 6 tempat desimal, setara denganNUMERIC(19,6). Tipe dataFIXNUMERICcocok untuk skenario perhitungan data skala kecil hingga menengah guna menyeimbangkan kinerja dan efisiensi penyimpanan.FIXNUMERIC128: Diimplementasikan berdasarkan integer 128-bit dengan presisi tetap(38,10), mendukung hingga 38 digit termasuk 10 tempat desimal, setara denganNUMERIC(38,10).FIXNUMERIC128sangat cocok untuk skenario yang memerlukan perhitungan data berjangkauan besar dan presisi tinggi serta unggul dalam analisis data skala besar.
Perbandingan dengan tipe NUMERIC
Fitur | FIXNUMERIC atau FIXNUMERIC128 | NUMERIC |
Presisi | Tetap (6 atau 10 tempat desimal secara default) | Variabel |
Rentang | Terbatas (berdasarkan integer 64-bit atau 128-bit) | Hampir tak terbatas |
Kinerja | Tinggi (melalui operasi berbasis set instruksi CPU asli) | Rendah |
Metode pembulatan | Membulatkan menuju nol | Membulatkan ke nilai terdekat |
Dukungan NaN | Tidak didukung | Didukung |
Batasan
Hanya instance AnalyticDB for PostgreSQL V7.0 versi V7.2.1.1 atau lebih baru yang mendukung ekstensi fixnumeric.
CatatanAnda dapat melihat versi minor pada halaman Informasi Dasar sebuah instance di konsol AnalyticDB for PostgreSQL. Jika instance Anda tidak memenuhi versi yang diperlukan, perbarui versi minor instance tersebut.
Instance AnalyticDB for PostgreSQL dalam mode Serverless tidak mendukung ekstensi fixnumeric.
Tipe
FIXNUMERICdanFIXNUMERIC128memiliki rentang nilai tetap. Saat rentang nilai ini dilampaui, akan terjadi kesalahan overflow.Berbeda dengan tipe
DECIMALatauNUMERICasli, tipeFIXNUMERICmemiliki skala tetap saat kolom dibuat. Anda tidak perlu secara eksplisit mendefinisikan skala saat membuat tabel karena skala telah ditetapkan di tingkat bawah.
Instalasi dan penghapusan
Ekstensi fixnumeric tidak mendukung instalasi berbasis GUI. Untuk menginstal ekstensi fixnumeric, submit a ticket. Setelah ekstensi diinstal, Anda harus memulai ulang instance AnalyticDB for PostgreSQL Anda. Untuk menghapus ekstensi fixnumeric, ajukan tiket.
Contoh
Tipe FIXNUMERIC dapat digunakan seperti tipe data lainnya di AnalyticDB for PostgreSQL dan dapat menggantikan tipe floating-point seperti FLOAT dan DOUBLE PRECISION secara mulus.
Langkah 1: Buat tabel dan tulis data ke tabel
Buat tabel bernama test_t dengan tipe data FIXNUMERIC dan tulis data uji ke tabel tersebut.
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;Langkah 2: Buat indeks
Tipe FIXNUMERIC mendukung indeks. Buat indeks untuk tabel test_t.
CREATE INDEX ON test_t (c);
CREATE INDEX ON test_t (d);Langkah 3: Kueri data
Kueri nilai
SUMdari kolom yang sesuai.SELECT SUM(a), SUM(b), SUM(c), SUM(d) FROM test_t ;Tipe
FLOATmengembalikan nilai perkiraan yang kurang akurat. TipeNUMERIC,FIXNUMERIC, danFIXNUMERIC128mengembalikan nilai yang tepat.sum | sum | sum | sum --------------------+---------------+-------------------+------------------- 500600.00000000175 | 500600.000000 | 500600.0000000000 | 500600.0000000000 (1 row)Kueri nilai
AVGdari kolom yang sesuai.SELECT AVG(a), AVG(b), AVG(c), AVG(d) FROM test_t;Tipe
FLOATmengembalikan nilai perkiraan. TipeNUMERIC,FIXNUMERIC, danFIXNUMERIC128mengembalikan nilai yang tepat.avg | avg | avg | avg -------------------+----------------------+------------+---------------- 500.6000000000017 | 500.6000000000000000 | 500.600000 | 500.6000000000 (1 row)
Fungsi yang didukung
Tipe FIXNUMERIC menyediakan kompatibilitas dan skalabilitas tinggi. Ini mendukung semua fungsi agregat, seperti SUM, AVG, MIN, dan MAX, serta kompatibel dengan sebagian besar fungsi yang mendukung tipe DECIMAL atau NUMERIC asli. Tabel berikut menjelaskan fungsi yang didukung.
Nama Fungsi | Deskripsi |
| Menghitung jumlah, rata-rata, minimum, atau maksimum nilai. |
| Memeriksa apakah suatu nilai berada dalam rentang. |
| Mengembalikan nilai absolut. |
| Mengembalikan tanda nilai parameter, seperti -1, 0, atau +1. |
| Membulatkan angka ke bilangan bulat terdekat dengan tipe |
| Memotong angka ke sejumlah tempat desimal tertentu. |
| Membulatkan angka ke atas ke bilangan bulat terdekat. |
| Membulatkan angka ke atas ke bilangan bulat terdekat (alias untuk |
| Membulatkan angka ke bawah ke bilangan bulat terdekat. |
| Menjalankan penambahan, pengurangan, perkalian, atau pembagian. |
| Bertindak sebagai operator perbandingan, seperti sama dengan, lebih besar dari, lebih kecil dari, lebih kecil dari atau sama dengan, lebih besar dari atau sama dengan, atau tidak sama dengan. |
| Mengembalikan sisa. |
| Mengembalikan akar kuadrat dengan tipe |
| Mengembalikan eksponen alami dengan tipe |
| Mengembalikan logaritma natural dengan tipe |
| Menjalankan operasi pangkat dengan tipe |
| Menjalankan operasi pangkat dengan tipe |
| Mengembalikan jumlah tempat desimal. |
| Menjalankan operasi logaritmik dengan tipe |
| Menjalankan operasi logaritmik basis-10 dengan tipe |
| Mengonversi angka menjadi string dengan tipe |