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)
Untuk mengetahui informasi selengkapnya, lihat Encoding dalam referensi Data API.

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 ReadModifyWriteRow mengasumsikan bahwa sel berisi bilangan bulat bertanda big-endian 64-bit.
  • Fungsi TO_VECTOR64 di SQL mengharapkan sel berisi array byte yang merupakan penyambungan byte big-endian dari angka floating point 64-bit.
  • Fungsi TO_VECTOR32 di SQL mengharapkan sel berisi array byte yang merupakan penyambungan byte big-endian dari angka floating point 32-bit.

Langkah berikutnya