Este tema describe cómo usar hints en LindormTable SQL para establecer marcas de tiempo en el versionado de datos.
Motor y versión compatibles
La sintaxis de hints solo está disponible para la versión 2.3.1 o posterior del motor LindormTable.
Para consultar o actualizar su versión actual, consulte Release notes for LindormTable y Upgrade a minor version.
Funcionamiento
En LindormTable, cada valor de columna recibe una marca de tiempo al escribirse. De forma predeterminada, esta marca de tiempo corresponde a la hora del servidor durante la operación de escritura y funciona como identificador de versión de la columna. Una marca de tiempo mayor indica una versión más reciente. También puede especificar una marca de tiempo personalizada. Si desea que una tabla de columnas anchas almacene varias versiones de datos, establezca el atributo de versión 'VERSIONS' = 'n' al crear la tabla, donde n representa el número máximo de versiones que se conservarán por columna. Para consultar varias versiones de datos, especifique los hints adecuados en su consulta. La siguiente tabla describe los hints utilizados para el versionado de datos.
|
Hint |
Descripción |
Instrucción aplicable |
|
_l_ts_(N) |
Lee o escribe datos con la marca de tiempo especificada. |
UPSERT, SELECT |
|
_l_versions_(N) |
Devuelve las N versiones más recientes de los datos en el conjunto de resultados. |
SELECT |
|
_l_ts_min_(N) |
Filtra el conjunto de resultados para devolver datos con una marca de tiempo mayor o igual a N. |
SELECT |
|
_l_ts_max_(N) |
Filtra el conjunto de resultados para devolver datos con una marca de tiempo menor que N. |
SELECT |
Procedimiento
Establecer marcas de tiempo y consultar datos
En LindormTable, puede asignar una marca de tiempo a una columna que no sea clave principal y usarla para consultar versiones específicas de los datos.
-
Cree una tabla de prueba y especifique el número de versiones que se deben conservar:
CREATE TABLE t_test_versions_2 (c1 INT , c2 INT, c3 VARCHAR(50), PRIMARY KEY(c1)) WITH(VERSIONS='5');NotaEjecute la instrucción
ALTER TABLE table_name SET 'VERSIONS' = 'num';para especificar o modificar el número de versiones de una tabla, donde table_name es el nombre de la tabla y num es la cantidad de versiones. -
Para establecer una marca de tiempo, especifique el hint correspondiente. Por ejemplo:
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); -
Consulte una versión específica de los datos mediante una marca de tiempo. Para ver la marca de tiempo de una columna, incluya tanto la columna como su columna extendida en la consulta. El nombre de la columna extendida sigue el formato
column_name_l_ts.Por ejemplo, para ver la marca de tiempo de la columna
c3, incluya tantoc3comoc3_l_tsen su instrucciónSELECT.ImportanteAl consultar información de versiones, si selecciona una columna extendida (por ejemplo, 'c3_l_ts') sin incluir un hint relacionado con versiones, la columna extendida en el conjunto de resultados devolverá
null. Por lo tanto, la instrucción de consulta también debe incluir un hint relacionado con versiones, como/*+ _l_versions_(1) */o/*+ _l_ts_min_(N) */.-
Ejemplo 1: Devolver datos con la marca de tiempo 1000.
SELECT /*+ _l_ts_(1000) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Se devuelve el siguiente resultado:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+ -
Ejemplo 2: Consultar datos con marcas de tiempo en el rango
[1000,2001).SELECT /*+ _l_ts_min_(1000), _l_ts_max_(2001) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Se devuelve el siguiente resultado:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+ -
Ejemplo 3: Devolver las N versiones más recientes de los datos mediante el hint
_l_versions_(N).SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Se devuelve el siguiente resultado:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 22 | 2001 | +----+----+---------+ -
Devuelve las dos versiones más recientes de cada columna. Las versiones con la misma marca de tiempo se agrupan en una sola fila. El hint
_l_versions_(N)recupera los datos de marca de tiempo de todas las columnas que no son clave principal.SELECT /*+ _l_versions_(2) */ c1, c2, c3, c2_l_ts, c3_l_ts FROM t_test_versions_2;Se devuelve el siguiente resultado:
+----+------+------+---------+---------+ | 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 | +----+------+------+---------+---------+ -
Ejemplo 5: El número de versiones devueltas está limitado por el atributo 'VERSIONS' de la tabla. Por ejemplo, aunque esta consulta solicita seis versiones con
_l_versions_(6), solo devuelve cinco porque la tabla se creó con 'VERSIONS'='5'.SELECT /*+ _l_versions_(6) */ c1, c2, c2_l_ts FROM t_test_versions_2 WHERE c1=2;Se devuelve el siguiente resultado:
+----+----+---------+ | c1 | c2 | c2_l_ts | +----+----+---------+ | 2 | 6 | 2006 | | 2 | 5 | 2005 | | 2 | 4 | 2004 | | 2 | 3 | 2003 | | 2 | 2 | 2002 | +----+----+---------+
-