Este tópico descreve como usar hints no SQL do LindormTable para definir timestamps no versionamento de dados.
Engine e versão compatíveis
A sintaxe de hint está disponível apenas para a engine LindormTable versão 2.3.1 ou posterior.
Para visualizar ou atualizar sua versão atual, consulte Notas de versão do LindormTable e Atualizar uma versão secundária.
Funcionamento
No LindormTable, cada valor de coluna recebe um timestamp durante a gravação. Por padrão, esse timestamp corresponde ao horário do servidor no momento da operação e funciona como identificador de versão da coluna. Um timestamp maior indica uma versão mais recente. Também é possível especificar um timestamp personalizado. Para que uma tabela wide-column armazene múltiplas versões dos dados, defina o atributo de versão 'VERSIONS' = 'n' ao criar a tabela, em que n representa o número máximo de versões retidas por coluna. Para consultar várias versões de dados, especifique os hints adequados na consulta. A tabela a seguir descreve os hints utilizados para versionamento de dados.
|
Hint |
Descrição |
Instrução aplicável |
|
_l_ts_(N) |
Lê ou grava dados com o timestamp especificado. |
UPSERT, SELECT |
|
_l_versions_(N) |
Retorna as N versões mais recentes dos dados no conjunto de resultados. |
SELECT |
|
_l_ts_min_(N) |
Filtra o conjunto de resultados para retornar dados com timestamp maior ou igual a N. |
SELECT |
|
_l_ts_max_(N) |
Filtra o conjunto de resultados para retornar dados com timestamp menor que N. |
SELECT |
Procedimento
Definir timestamps e consultar dados
No LindormTable, defina um timestamp para uma coluna que não seja chave primária e utilize-o para consultar versões específicas dos dados.
-
Crie uma tabela de teste e especifique o número de versões a serem retidas:
CREATE TABLE t_test_versions_2 (c1 INT , c2 INT, c3 VARCHAR(50), PRIMARY KEY(c1)) WITH(VERSIONS='5');NotaExecute a instrução
ALTER TABLE table_name SET 'VERSIONS' = 'num';para especificar ou modificar o número de versões de uma tabela, em que table_name é o nome da tabela e num é a quantidade de versões. -
Para definir um timestamp, especifique o hint apropriado. Por exemplo:
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 uma versão específica dos dados usando um timestamp. Para visualizar o timestamp de uma coluna, inclua tanto a coluna quanto sua coluna estendida na consulta. O nome da coluna estendida segue o formato
column_name_l_ts.Por exemplo, para visualizar o timestamp da coluna
c3, inclua tantoc3quantoc3_l_tsna instruçãoSELECT.ImportanteAo consultar informações de versão, se você selecionar uma coluna estendida (por exemplo, 'c3_l_ts') sem incluir um hint relacionado a versões, a coluna estendida no conjunto de resultados retornará
null. Portanto, a instrução de consulta também deve conter um hint relacionado a versões, como/*+ _l_versions_(1) */ou/*+ _l_ts_min_(N) */.-
Exemplo 1: Retornar dados no timestamp 1000.
SELECT /*+ _l_ts_(1000) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Resultado retornado:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+ -
Exemplo 2: Consultar dados com timestamps no intervalo
[1000,2001).SELECT /*+ _l_ts_min_(1000), _l_ts_max_(2001) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Resultado retornado:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+ -
Exemplo 3: Retornar as N versões mais recentes dos dados utilizando o hint
_l_versions_(N).SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Resultado retornado:
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 22 | 2001 | +----+----+---------+ -
Retorna as duas versões mais recentes de cada coluna. Versões com o mesmo timestamp são agrupadas em uma única linha. O hint
_l_versions_(N)recupera dados de timestamp para todas as colunas que não são chave primária.SELECT /*+ _l_versions_(2) */ c1, c2, c3, c2_l_ts, c3_l_ts FROM t_test_versions_2;Resultado retornado:
+----+------+------+---------+---------+ | 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 | +----+------+------+---------+---------+ -
Exemplo 5: O número de versões retornadas é limitado pelo atributo 'VERSIONS' da tabela. Por exemplo, embora esta consulta solicite seis versões com
_l_versions_(6), ela retorna apenas cinco porque a tabela foi criada com 'VERSIONS'='5'.SELECT /*+ _l_versions_(6) */ c1, c2, c2_l_ts FROM t_test_versions_2 WHERE c1=2;Resultado retornado:
+----+----+---------+ | c1 | c2 | c2_l_ts | +----+----+---------+ | 2 | 6 | 2006 | | 2 | 5 | 2005 | | 2 | 4 | 2004 | | 2 | 3 | 2003 | | 2 | 2 | 2002 | +----+----+---------+
-