Penerapan jenis data di Bigtable
Skema Bigtable yang fleksibel memungkinkan Anda menyimpan data jenis apa pun – string, tanggal, angka, dokumen JSON, atau bahkan gambar atau PDF – dalam tabel Bigtable.
Dokumen ini menjelaskan kapan Bigtable menerapkan jenis, yang mengharuskan Anda untuk mengenkode atau mendekodenya dalam kode aplikasi. Untuk mengetahui daftar jenis data Bigtable, lihat Jenis dalam dokumentasi referensi Data API.
Jenis yang diterapkan
Jenis data diterapkan untuk data berikut:
- Grup kolom gabungan (penghitung)
- Stempel waktu
- Tampilan terwujud berkelanjutan
- Row key terstruktur
Agregat
Untuk jenis data gabungan, encoding bergantung pada jenis agregasi. Saat membuat grup kolom agregat, Anda harus menentukan jenis agregasi.
Tabel ini menampilkan jenis input dan encoding untuk setiap jenis agregasi.
| Jenis agregat | Jenis input | Encoding |
|---|---|---|
| Sum | Int64 |
BigEndianBytes
|
| Mnt | Int64 |
BigEndianBytes
|
| Maks | Int64 |
BigEndianBytes
|
| HLL | Byte | Zetasketch HLL++ |
Saat Anda membuat kueri data dalam sel gabungan menggunakan SQL, SQL akan otomatis menyertakan informasi jenis.
Saat Anda membaca data dalam sel gabungan menggunakan metode ReadRows Data API, Bigtable menampilkan byte, sehingga aplikasi Anda harus mendekode nilai menggunakan encoding yang digunakan Bigtable untuk memetakan data yang diketik ke byte.
Anda tidak dapat mengonversi grup kolom yang berisi data non-gabungan menjadi grup kolom gabungan. Kolom dalam grup kolom agregat tidak boleh berisi sel non-agregat, dan grup kolom standar tidak boleh berisi sel agregat.
Untuk mengetahui informasi selengkapnya tentang cara membuat tabel dengan grup kolom gabungan, lihat Membuat tabel. Untuk contoh kode yang menunjukkan cara meningkatkan sel agregat dengan nilai yang dienkode, lihat Meningkatkan nilai.
Stempel waktu
Setiap sel Bigtable memiliki stempel waktu Int64 yang mewakili jumlah mikrodetik sejak epoch Unix, 1970-01-01 00:00:00 UTC.
Asal stempel waktu
Setiap stempel waktu dalam tabel Bigtable memiliki asal yang menunjukkan cara stempel waktu ditetapkan. Bigtable mengenali asal stempel waktu berikut:
- Ditentukan pengguna: stempel waktu yang ditetapkan oleh Anda atau oleh aplikasi.
- Dibuat oleh Bigtable: stempel waktu yang ditetapkan oleh library klien yang menggunakan jam sistem lokal klien atau dibuat oleh server yang menggunakan waktu saat ini di server.
Perincian dan presisi stempel waktu
Bigtable mendukung tingkat perincian stempel waktu berikut:
- Tingkat perincian milidetik (default): stempel waktu harus berupa nilai mikrodetik dengan presisi maksimal milidetik, seperti
3023483279876000. Bigtable menolak stempel waktu yang ditentukan pengguna dengan presisi mikrodetik dan memotong stempel waktu yang dihasilkan Bigtable dengan presisi mikrodetik menjadi presisi milidetik. - Perincian mikrodetik: stempel waktu dapat memiliki presisi mikrodetik penuh, seperti
3023483279876543. Bigtable menerima stempel waktu yang ditentukan pengguna dan dibuat oleh Bigtable dengan presisi mikrodetik.
Anda menetapkan perincian stempel waktu saat membuat tabel.
Batasan stempel waktu
Batasan berikut berlaku untuk tabel dengan perincian stempel waktu mikrodetik:
- Hanya library klien Bigtable untuk Java versi 2.82.0 atau yang lebih baru yang mendukung perincian stempel waktu mikrodetik. Permintaan baca atau tulis yang menggunakan klien lain akan gagal.
- Perincian stempel waktu mikrodetik hanya tersedia untuk instance di edisi Enterprise Plus.
- Anda tidak dapat mengubah perincian stempel waktu tabel setelah dibuat.
- Anda tidak dapat membuat tampilan terwujud berkelanjutan pada tabel dengan perincian mikrodetik.
- Anda tidak dapat membuat tampilan logis pada tabel dengan perincian mikrodetik.
- Anda tidak dapat mendowngrade instance dari Enterprise Plus ke Enterprise jika instance tersebut berisi tabel dengan perincian mikrodetik. Anda harus menghapus tabel ini sebelum memulai downgrade.
- Cadangan tabel dengan perincian mikrodetik hanya dapat dipulihkan ke instance Enterprise Plus.
Tampilan terwujud berkelanjutan
Tampilan terwujud berkelanjutan adalah resource hanya baca yang dapat Anda baca menggunakan SQL atau dengan panggilan ReadRows Data API. Data dalam tampilan terwujud diketik berdasarkan kueri yang menentukannya. Untuk ringkasannya, lihat Tampilan terwujud berkelanjutan.
Saat Anda menggunakan SQL untuk membuat kueri tampilan terwujud berkelanjutan, SQL akan otomatis menyertakan informasi jenis.
Saat Anda membaca dari tampilan terwujud berkelanjutan menggunakan permintaan ReadRows Data API, Anda harus mengetahui jenis setiap kolom dan mendekodenya dalam kode aplikasi Anda.
Nilai gabungan dalam tampilan terwujud berkelanjutan disimpan menggunakan encoding yang dijelaskan dalam tabel berikut, berdasarkan jenis output kolom dari definisi tampilan.
| Jenis | Encoding |
|---|---|
| BOOL | Nilai 1 byte, 1 = benar, 0 = salah |
| BYTES | Tanpa encoding |
| INT64 (atau INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) | Big-endian 64-bit |
| FLOAT64 | IEEE 754 64-bit, tidak termasuk NaN dan +/-inf |
| STRING | UTF-8 |
| TIME/TIMESTAMP | Bilangan bulat 64-bit yang mewakili jumlah mikrodetik sejak epoch Unix (konsisten dengan GoogleSQL) |
Row key terstruktur
Row key terstruktur memungkinkan Anda mengakses data menggunakan kunci multi-kolom, mirip dengan kunci komposit dalam database relasional.
Jenis dan encoding untuk row key terstruktur ditentukan oleh skema row key yang dapat Anda tambahkan secara opsional ke tabel Bigtable. Data row key terstruktur disimpan sebagai byte, tetapi GoogleSQL untuk Bigtable otomatis menggunakan jenis dan encoding yang ditentukan dalam skema row key saat Anda menjalankan kueri SQL pada tabel.
Penggunaan skema row key untuk mengkueri tabel dengan permintaan ReadRows tidak didukung. Tampilan terwujud berkelanjutan memiliki skema row key secara default. Untuk
mengetahui informasi selengkapnya tentang row key terstruktur, lihat Mengelola skema
row key.
Jenis yang tidak diterapkan
Jika tidak ada informasi jenis yang diberikan, Bigtable akan memperlakukan setiap sel sebagai byte dengan encoding yang tidak diketahui.
Saat mengkueri grup kolom yang dibuat tanpa penerapan jenis, Anda harus memberikan informasi jenis pada waktu baca untuk memastikan bahwa data dibaca dengan benar. Hal ini relevan dengan fungsi database yang perilakunya bergantung pada jenis data. GoogleSQL untuk Bigtable menawarkan fungsi CAST untuk melakukan konversi jenis pada waktu kueri. Fungsi ini mengonversi dari byte ke jenis yang diharapkan oleh berbagai fungsi.
Meskipun Bigtable tidak menerapkan jenis, operasi tertentu mengasumsikan jenis data. Dengan mengetahui hal ini, Anda dapat memastikan bahwa data Anda ditulis dengan cara yang dapat diproses dalam database. Berikut adalah contohnya:
- Penambahan menggunakan
ReadModifyWriteRowmengasumsikan bahwa sel berisi bilangan bulat bertanda big-endian 64-bit. - Fungsi
TO_VECTOR64di SQL mengharapkan sel berisi array byte yang merupakan penyambungan byte big-endian dari angka floating point 64-bit. - Fungsi
TO_VECTOR32di SQL mengharapkan sel berisi array byte yang merupakan penyambungan byte big-endian dari angka floating point 32-bit.