Spanner mendukung jenis data NUMERIC
di database GoogleSQL dan PostgreSQL.
NUMERIC GoogleSQL
NUMERIC
GoogleSQL adalah jenis data numerik yang tepat dan dapat merepresentasikan nilai numerik yang tepat dengan presisi 38 dan skala 9. Halaman ini memberikan ringkasan tentang cara NUMERIC
direpresentasikan dalam library klien.
PostgreSQL NUMERIC
Jenis NUMERIC
PostgreSQL adalah jenis data numerik presisi desimal arbitrer
dengan presisi maksimum (total digit) 147.455 dan skala maksimum
(digit di sebelah kanan titik desimal) 16.383.
DDL Spanner tidak mendukung penentuan presisi dan skala untuk
kolom NUMERIC
PostgreSQL. Namun, nilai numerik dapat ditransmisikan ke
nilai presisi tetap dalam pernyataan DML. Contoh:
update t1 set numeric_column = (numeric_column*0.8)::numeric(5,2);
Jenis DECIMAL
adalah alias untuk NUMERIC
.
Kolom NUMERIC
PostgreSQL tidak dapat digunakan saat menentukan kunci utama,
kunci asing, atau indeks sekunder.
Merepresentasikan NUMERIC dalam setiap bahasa library klien
Untuk mempertahankan fidelitas nilai NUMERIC
, setiap library klien Spanner menyimpan nilai tersebut dalam jenis data yang sesuai dalam bahasa library klien. Tabel berikut mencantumkan jenis data yang dipetakan NUMERIC
di setiap bahasa yang didukung.
Bahasa | GoogleSQL | PostgreSQL |
---|---|---|
C++ | spanner::Numeric | |
C# | SpannerNumeric | |
Go | big.Rat | PGNumeric Kustom |
Java | BigDecimal | Jenis kustom. Lihat catatan library Java PostgreSQL. |
Node.js | Besar | |
PHP | Angka kustom | |
Python | Desimal | Desimal dengan anotasi kustom |
Ruby | BigDecimal |
Tiga library klien, C++, C#, dan PHP masing-masing telah menerapkan jenis kustom untuk mewakili jenis NUMERIC
Spanner SQL. Semua library lainnya menggunakan
jenis yang ada.
Objek spanner::Numeric
library klien C++ tidak mendukung operasi
aritmetika. Sebagai gantinya, konversikan angka yang ada ke objek C++ pilihan.
Misalnya, Anda dapat mengekstrak angka sebagai string, yang akan mewakili
angka dengan fidelitas penuh dan tanpa kehilangan data. Namun, jika Anda mengetahui terlebih dahulu bahwa angka tersebut cocok, misalnya, dalam rentang std:int64_t
atau double
, Anda dapat mengakses nilai sebagai jenis tersebut.
Catatan library Java PostgreSQL
Library klien Java Spanner menggunakan jenis Value.pgNumeric
kustom
untuk menyimpan nilai NUMERIC PostgreSQL.
Menulis ke kolom NUMERIC
Beberapa jenis didukung saat menulis ke kolom NUMERIC dalam tabel PostgreSQL.
Numerik
INSERT INTO Table (id, PgNumericColumn) VALUES (1, 1.23)
Bilangan bulat
INSERT INTO Table (id, PgNumericColumn) VALUES (1, 1)
Ganda
INSERT INTO Table (id, PgNumericColumn) VALUES (1, 1.23::float8)
Literal tanpa jenis
INSERT INTO Table (id, PgNumericColumn) VALUES (1, 'NaN')
Kueri berparameter
Saat menggunakan kueri berparameter, tentukan parameter dengan $<index>
,
dengan <index>
menunjukkan posisi parameter. Parameter tersebut kemudian harus
diikat menggunakan p<index>
. Misalnya,
INSERT INTO MyTable (PgNumericColumn) VALUES ($1)
dengan parameter
p1
.
Library klien Java mendukung jenis berikut sebagai nilai berparameter:
Value.pgNumeric
kustomStatement .newBuilder("INSERT INTO MyTable (PgNumericColumn) VALUES ($1), ($2)") .bind("p1") .to(Value.pgNumeric("1.23")) .bind("p2") .to(Value.pgNumeric("NaN")) .build()
Ganda
Statement .newBuilder("INSERT INTO MyTable (PgNumericColumn) VALUES ($1), ($2)") .bind("p1") .to(1.23D) .bind("p2") .to(Double.NaN) .build()
Bilangan bulat
Statement .newBuilder("INSERT INTO MyTable (PgNumericColumn) VALUES ($1)") .bind("p1") .to(1) .build()
Panjang
Statement .newBuilder("INSERT INTO MyTable (PgNumericColumn) VALUES ($1)") .bind("p1") .to(1L) .build()
Mutasi
Saat menggunakan Mutasi, nilai berikut diizinkan untuk ditulis ke kolom jenis numerik:
String
Mutation .newInsertBuilder("MyTable") .set("PgNumericColumn") .to("1.23") .build()
Nilai jenis BigDecimal
BigDecimals
Mutation .newInsertBuilder("MyTable") .set("PgNumericColumn") .to(new BigDecimal("1.23")) .build()
Int
Mutation .newInsertBuilder("MyTable") .set("PgNumericColumn") .to(1) .build()
Panjang
Mutation .newInsertBuilder("MyTable") .set("PgNumericColumn") .to(1L) .build()
Nilai yang diperoleh sebagai hasil dari panggilan ke Value.pgNumeric
Mutation .newInsertBuilder("MyTable") .set("PgNumericColumn") .to(Value.pgNumeric("1.23")) .build()
Mengambil dari kolom NUMERIC
Untuk mendapatkan nilai yang disimpan dalam kolom numerik ResultSet,
gunakan ResultSet.getString()
atau ResultSet.getValue()
.
String
resultSet.getString("PgNumericColumn")
Nilai Kustom
Value pgNumeric = resultSet.getValue("PgNumericColumn"); pgNumeric.getString(); // get underlying value as a String pgNumeric.getNumeric(); // get underlying value as a BigDecimal pgNumeric.getFloat64(); // get underlying value as aDouble
Menambahkan kolom NUMERIC
Contoh berikut menunjukkan cara menambahkan kolom NUMERIC
ke tabel yang disebut
Venues
menggunakan library klien Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Memperbarui data NUMERIC
Contoh berikut menunjukkan cara memperbarui data NUMERIC
menggunakan library klien Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Membuat kueri data NUMERIC
Contoh berikut menunjukkan cara membuat kueri data NUMERIC
menggunakan library klien Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
NUMERIC
didukung di driver JDBC Spanner menggunakan jenis
BigDecimal Java. Untuk mengetahui contoh cara
penggunaan NUMERIC
, lihat contoh kode di
Menghubungkan JDBC ke database dialek GoogleSQL.
Menangani NUMERIC saat membuat library klien atau driver
Jenis NUMERIC
dienkode sebagai string dalam notasi desimal atau ilmiah dalam proto google.protobuf.Value. Proto ini digabungkan sebagai
ResultSet, PartialResultSet, atau Mutation, bergantung pada apakah
proto tersebut sedang dibaca atau ditulis. ResultSetMetadata akan menggunakan NUMERIC
TypeCode untuk menunjukkan bahwa nilai yang sesuai harus dibaca sebagai
NUMERIC
.
Saat menggunakan NUMERIC di library klien atau driver yang Anda buat, amati panduan berikut.
Untuk membaca
NUMERIC
dari ResultSet:Membaca string_value dari proto google.protobuf.Value saat TypeCode adalah
NUMERIC
Mengonversi string tersebut ke jenis yang relevan untuk bahasa tertentu
Untuk menulis
NUMERIC
menggunakan Mutasi, gunakan representasi string sebagai string_value dalam proto google.protobuf.Value saat diberi jenis yang relevan.