Topik ini menjelaskan cara menggunakan hint dalam SQL LindormTable untuk mengatur timestamp guna pengendalian versi data.
Mesin dan versi yang didukung
Sintaks hint hanya tersedia pada mesin LindormTable versi 2.3.1 atau lebih baru.
Untuk melihat atau melakukan upgrade versi saat ini, lihat Catatan rilis untuk LindormTable dan Upgrade versi minor.
Cara kerja
Di LindormTable, setiap nilai kolom menerima timestamp saat ditulis. Secara default, timestamp tersebut adalah waktu server dari operasi penulisan dan berfungsi sebagai pengidentifikasi versi kolom. Timestamp yang lebih besar menunjukkan versi yang lebih baru. Anda juga dapat menentukan timestamp kustom. Agar tabel wide-column menyimpan beberapa versi data, Anda harus mengatur atribut versi 'VERSIONS' = 'n' saat membuat tabel, dengan n sebagai jumlah maksimum versi yang disimpan untuk setiap kolom. Untuk mengkueri beberapa versi data, Anda harus menyertakan hint yang sesuai dalam kueri Anda. Tabel berikut menjelaskan hint yang digunakan untuk pengendalian versi data.
Hint | Deskripsi | Pernyataan yang berlaku |
_l_ts_(N) | Membaca atau menulis data dengan timestamp yang ditentukan. | UPSERT, SELECT |
_l_versions_(N) | Mengembalikan N versi data terbaru dalam set hasil. | SELECT |
_l_ts_min_(N) | Menyaring set hasil untuk mengembalikan data dengan timestamp lebih besar dari atau sama dengan N. | SELECT |
_l_ts_max_(N) | Menyaring set hasil untuk mengembalikan data dengan timestamp kurang dari N. | SELECT |
Prosedur
Atur timestamp dan kueri data
Di LindormTable, Anda dapat mengatur timestamp untuk kolom non-primary key dan menggunakannya untuk mengkueri versi data tertentu.
Buat tabel uji dan tentukan jumlah versi yang akan disimpan:
CREATE TABLE t_test_versions_2 (c1 INT , c2 INT, c3 VARCHAR(50), PRIMARY KEY(c1)) WITH(VERSIONS='5');CatatanAnda dapat menjalankan pernyataan
ALTER TABLE table_name SET 'VERSIONS' = 'num';untuk menentukan atau mengubah jumlah versi untuk suatu tabel, dengan table_name sebagai nama tabel dan num sebagai jumlah versi.Untuk mengatur timestamp, Anda harus menyertakan hint yang sesuai. Contohnya:
UPSERT /*+ _l_ts_(1000) */ INTO t_test_versions_2(c1, c3) values (1, '11'); UPSERT /*+ _l_ts_(2001) */ INTO t_test_versions_2(c1, c3) values (1, '22'); UPSERT /*+ _l_ts_(1000) */ INTO t_test_versions_2(c1, c2) values (1, 1); UPSERT /*+ _l_ts_(2001) */ INTO t_test_versions_2(c1, c2) values (2, 1); UPSERT /*+ _l_ts_(2002) */ INTO t_test_versions_2(c1, c2) values (2, 2); UPSERT /*+ _l_ts_(2003) */ INTO t_test_versions_2(c1, c2) values (2, 3); UPSERT /*+ _l_ts_(2004) */ INTO t_test_versions_2(c1, c2) values (2, 4); UPSERT /*+ _l_ts_(2005) */INTO t_test_versions_2(c1, c2) values (2, 5); UPSERT /*+ _l_ts_(2006) */ INTO t_test_versions_2(c1, c2) values (2, 6);Kueri versi data tertentu berdasarkan timestamp. Untuk melihat timestamp suatu kolom, Anda harus menyertakan kolom tersebut beserta kolom ekstensinya dalam kueri. Nama kolom ekstensi mengikuti format
column_name_l_ts.Sebagai contoh, untuk melihat timestamp kolom
c3, sertakanc3danc3_l_tsdalam pernyataanSELECTAnda.PentingSaat mengkueri informasi versi, jika Anda memilih kolom ekstensi (misalnya, 'c3_l_ts') tanpa menyertakan hint terkait versi, kolom ekstensi dalam set hasil akan mengembalikan
null. Oleh karena itu, pernyataan kueri juga harus menyertakan hint terkait versi, seperti/*+ _l_versions_(1) */atau/*+ _l_ts_min_(N) */.Contoh 1: Mengembalikan data pada timestamp 1000.
SELECT /*+ _l_ts_(1000) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Hasil berikut dikembalikan:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+Contoh 2: Mengkueri data dengan timestamp dalam rentang
[1000,2001).SELECT /*+ _l_ts_min_(1000), _l_ts_max_(2001) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Hasil berikut dikembalikan:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+Contoh 3: Mengembalikan N versi data terbaru dengan menggunakan hint
_l_versions_(N).SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Hasil berikut dikembalikan:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 22 | 2001 | +----+----+---------+Mengembalikan dua versi terbaru untuk setiap kolom. Versi dengan timestamp yang sama dikelompokkan dalam satu baris. Hint
_l_versions_(N)mengambil data timestamp untuk semua kolom non-primary key.SELECT /*+ _l_versions_(2) */ c1, c2, c3, c2_l_ts, c3_l_ts FROM t_test_versions_2;Hasil berikut dikembalikan:
+----+------+------+---------+---------+ | c1 | c2 | c3 | c2_l_ts | c3_l_ts | +----+------+------+---------+---------+ | 1 | null | 22 | null | 2001 | | 1 | 1 | 11 | 1000 | 1000 | | 2 | 6 | null | 2006 | null | | 2 | 5 | null | 2005 | null | +----+------+------+---------+---------+Contoh 5: Jumlah versi yang dikembalikan dibatasi oleh atribut 'VERSIONS' tabel. Sebagai contoh, meskipun kueri ini meminta enam versi dengan
_l_versions_(6), hanya lima versi yang dikembalikan karena tabel dibuat dengan 'VERSIONS'='5'.SELECT /*+ _l_versions_(6) */ c1, c2, c2_l_ts FROM t_test_versions_2 WHERE c1=2;Hasil berikut dikembalikan:
+----+----+---------+ | c1 | c2 | c2_l_ts | +----+----+---------+ | 2 | 6 | 2006 | | 2 | 5 | 2005 | | 2 | 4 | 2004 | | 2 | 3 | 2003 | | 2 | 2 | 2002 | +----+----+---------+