Topik ini menjelaskan cara menggunakan petunjuk dalam LindormTable SQL untuk mengonfigurasi timestamp guna mendukung versi data.
Mesin dan versi yang berlaku
Petunjuk hanya berlaku untuk LindormTable 2.3.1 dan versi selanjutnya.
Untuk informasi lebih lanjut tentang cara melihat atau meningkatkan versi LindormTable, lihat Catatan Rilis LindormTable dan Tingkatkan Versi Mesin Minor dari Instance Lindorm.
Ikhtisar
Timestamp dicatat untuk data yang ditulis ke setiap kolom di LindormTable. Timestamp ini menunjukkan waktu server saat data ditulis ke kolom. Secara default, timestamp digunakan sebagai ID versi data yang ditulis ke kolom. Anda juga dapat menentukan timestamp untuk data yang ditulis ke kolom. Semakin besar timestamp, semakin baru versinya. Untuk menyimpan beberapa versi kolom tabel lebar di LindormTable, Anda harus mengonfigurasi atribut 'VERSIONS' = 'n' saat membuat tabel. Dalam atribut tersebut, n adalah bilangan bulat positif yang menunjukkan jumlah maksimum versi yang dapat disimpan untuk setiap kolom. Untuk meminta data berversi berdasarkan timestamp di LindormTable, Anda harus menentukan atribut tertentu dalam pernyataan SQL. Tabel berikut menjelaskan atribut yang dapat Anda tentukan.
Atribut | Deskripsi | Pernyataan yang berlaku |
_l_ts_(N) | Menentukan timestamp untuk versi. | UPSERT dan SELECT |
_l_versions_(N) | Menentukan bahwa N versi terbaru dari data yang Anda query akan dikembalikan. | SELECT |
_l_ts_min_(N) | Menentukan bahwa versi dengan timestamp lebih besar dari N dikembalikan. | SELECT |
_l_ts_max_(N) | Menentukan bahwa versi dengan timestamp lebih kecil dari N dikembalikan. | SELECT |
Penggunaan
Konfigurasikan timestamp dan kueri data berversi
Di LindormTable, Anda dapat mengonfigurasi timestamp untuk kolom non-kunci utama dan menggunakan timestamp tersebut untuk mengkueri versi data yang ditentukan.
Jalankan pernyataan berikut untuk membuat tabel uji dan tentukan jumlah versi yang akan dipertahankan:
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 memodifikasi jumlah versi yang ingin Anda pertahankan untuk data dalam tabel. Dalam pernyataan tersebut, parameter table_name menunjukkan nama tabel dan parameter num menunjukkan jumlah versi yang ingin Anda pertahankan.Tulis data ke tabel. Anda harus menentukan atribut _l_ts_(N) dalam pernyataan berikut untuk mengonfigurasi timestamp.
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 yang ditentukan menggunakan timestamp. Untuk melihat timestamp kolom yang di-query dalam hasil, tambahkan akhiran
_l_tske nama kolom dalam pernyataan.PentingSaat Anda mengkueri versi data menggunakan timestamp dan hanya menentukan nama kolom serta akhiran timestamp dalam pernyataan query, nilai kolom timestamp dalam hasil query adalah
null. Dalam hal ini, pernyataan query juga harus mencakup petunjuk yang relevan, seperti/*+ _l_versions_(1) */atau/*+ _l_ts_min_(N) */.Contoh 1: Kueri data dengan 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: Kueri 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: Kueri N versi terbaru dari data yang ditentukan dengan menentukan atribut
_l_versions_(N). Dalam contoh ini, nilai N diatur menjadi 1.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 | +----+----+---------+Contoh 4: Kueri dua versi terbaru dari semua kolom dan tampilkan kolom berbeda dengan timestamp yang sama dalam baris yang sama. Jika Anda menentukan atribut
_l_versions_(N)dalam pernyataan, timestamp dari semua kolom non-kunci utama dikembalikan.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: Kueri enam versi terbaru dari kolom yang ditentukan. Namun, atribut VERSIONS dari tabel uji diatur ke 5 saat tabel dibuat. Oleh karena itu, hanya lima versi terbaru dari kolom yang dikembalikan meskipun atribut
_l_versions_(6)ditentukan dalam pernyataan.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 | +----+----+---------+