全部产品
Search
文档中心

AnalyticDB:fixnumeric

更新时间:Jul 06, 2025

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 dengan NUMERIC(19,6). Tipe data FIXNUMERIC cocok 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 dengan NUMERIC(38,10). FIXNUMERIC128 sangat 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.

    Catatan

    Anda 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 FIXNUMERIC dan FIXNUMERIC128 memiliki rentang nilai tetap. Saat rentang nilai ini dilampaui, akan terjadi kesalahan overflow.

  • Berbeda dengan tipe DECIMAL atau NUMERIC asli, tipe FIXNUMERIC memiliki 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 SUM dari kolom yang sesuai.

    SELECT SUM(a), SUM(b), SUM(c), SUM(d) FROM test_t ;

    Tipe FLOAT mengembalikan nilai perkiraan yang kurang akurat. Tipe NUMERIC, FIXNUMERIC, dan FIXNUMERIC128 mengembalikan nilai yang tepat.

            sum         |      sum      |        sum        |        sum
    --------------------+---------------+-------------------+-------------------
     500600.00000000175 | 500600.000000 | 500600.0000000000 | 500600.0000000000
    (1 row)
  • Kueri nilai AVG dari kolom yang sesuai.

    SELECT AVG(a), AVG(b), AVG(c), AVG(d) FROM test_t;

    Tipe FLOAT mengembalikan nilai perkiraan. Tipe NUMERIC, FIXNUMERIC, dan FIXNUMERIC128 mengembalikan 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

sum, avg, min, atau max

Menghitung jumlah, rata-rata, minimum, atau maksimum nilai.

in_range

Memeriksa apakah suatu nilai berada dalam rentang.

abs

Mengembalikan nilai absolut.

sign

Mengembalikan tanda nilai parameter, seperti -1, 0, atau +1.

round

Membulatkan angka ke bilangan bulat terdekat dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

trunc

Memotong angka ke sejumlah tempat desimal tertentu.

ceil

Membulatkan angka ke atas ke bilangan bulat terdekat.

ceiling

Membulatkan angka ke atas ke bilangan bulat terdekat (alias untuk ceil).

floor

Membulatkan angka ke bawah ke bilangan bulat terdekat.

add, sub, mul, atau div

Menjalankan penambahan, pengurangan, perkalian, atau pembagian.

=, >, <, <=, >=, atau <>

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.

mod

Mengembalikan sisa.

sqrt

Mengembalikan akar kuadrat dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

exp

Mengembalikan eksponen alami dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

ln

Mengembalikan logaritma natural dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

pow

Menjalankan operasi pangkat dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

power

Menjalankan operasi pangkat dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE (alias untuk pow).

scale

Mengembalikan jumlah tempat desimal.

log

Menjalankan operasi logaritmik dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

log10

Menjalankan operasi logaritmik basis-10 dengan tipe FIXNUMERIC dikonversi ke tipe DOUBLE.

to_char

Mengonversi angka menjadi string dengan tipe FIXNUMERIC dikonversi ke tipe NUMERIC.