Cette rubrique explique comment utiliser les hints dans LindormTable SQL pour définir des horodatages afin de gérer le versionnement des données.
Moteur et version pris en charge
La syntaxe des hints est disponible uniquement pour la version 2.3.1 ou ultérieure du moteur LindormTable.
Pour consulter ou mettre à niveau votre version actuelle, consultez les Notes de version de LindormTable ainsi que la procédure de Mise à niveau d'une version mineure.
Fonctionnement
Dans LindormTable, chaque valeur de colonne reçoit un horodatage lors de l'écriture. Par défaut, cet horodatage correspond à l'heure du serveur au moment de l'opération d'écriture et sert d'identifiant de version pour la colonne. Un horodatage plus élevé indique une version plus récente. Vous pouvez également spécifier un horodatage personnalisé. Si vous souhaitez qu'une table à colonnes larges stocke plusieurs versions de données, définissez l'attribut de version 'VERSIONS' = 'n' lors de la création de la table, où n représente le nombre maximal de versions à conserver pour chaque colonne. Pour interroger plusieurs versions de données, incluez les hints appropriés dans votre requête. Le tableau suivant décrit les hints utilisés pour le versionnement des données.
|
Hint |
Description |
Instruction applicable |
|
_l_ts_(N) |
Lit ou écrit des données avec l'horodatage spécifié. |
UPSERT, SELECT |
|
_l_versions_(N) |
Renvoie les N versions de données les plus récentes dans l'ensemble de résultats. |
SELECT |
|
_l_ts_min_(N) |
Filtre l'ensemble de résultats pour renvoyer les données dont l'horodatage est supérieur ou égal à N. |
SELECT |
|
_l_ts_max_(N) |
Filtre l'ensemble de résultats pour renvoyer les données dont l'horodatage est inférieur à N. |
SELECT |
Procédure
Définition des horodatages et interrogation des données
Dans LindormTable, vous pouvez définir un horodatage pour une colonne ne faisant pas partie de la clé primaire et utiliser cet horodatage pour interroger des versions spécifiques de données.
-
Créez une table de test et spécifiez le nombre de versions à conserver :
CREATE TABLE t_test_versions_2 (c1 INT , c2 INT, c3 VARCHAR(50), PRIMARY KEY(c1)) WITH(VERSIONS='5');RemarqueVous pouvez exécuter l'instruction
ALTER TABLE table_name SET 'VERSIONS' = 'num';pour spécifier ou modifier le nombre de versions d'une table, où table_name représente le nom de la table et num le nombre de versions. -
Pour définir un horodatage, spécifiez le hint approprié. Par exemple :
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); -
Interrogez une version spécifique de données en utilisant un horodatage. Pour consulter l'horodatage d'une colonne, spécifiez la colonne ainsi que sa colonne étendue dans votre requête. Le nom de la colonne étendue suit le format
column_name_l_ts.Par exemple, pour consulter l'horodatage de la colonne
c3, incluez à la foisc3etc3_l_tsdans votre instructionSELECT.ImportantLors de l'interrogation des informations de version, si vous sélectionnez une colonne étendue (par exemple, 'c3_l_ts') sans inclure de hint lié à la version, la colonne étendue dans l'ensemble de résultats renvoie
null. Par conséquent, l'instruction de requête doit également inclure un hint lié à la version, tel que/*+ _l_versions_(1) */ou/*+ _l_ts_min_(N) */.-
Exemple 1 : Renvoyer les données à l'horodatage 1000.
SELECT /*+ _l_ts_(1000) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Le résultat suivant est renvoyé :
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+ -
Exemple 2 : Interroger les données dont les horodatages se situent dans la plage
[1000,2001).SELECT /*+ _l_ts_min_(1000), _l_ts_max_(2001) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Le résultat suivant est renvoyé :
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 11 | 1000 | +----+----+---------+ -
Exemple 3 : Renvoyer les N versions de données les plus récentes en utilisant le hint
_l_versions_(N).SELECT /*+ _l_versions_(1) */ c1, c3, c3_l_ts FROM t_test_versions_2 WHERE c1 = 1;Le résultat suivant est renvoyé :
+----+----+---------+ | c1 | c3 | c3_l_ts | +----+----+---------+ | 1 | 22 | 2001 | +----+----+---------+ -
Renvoie les deux versions les plus récentes pour chaque colonne. Les versions partageant le même horodatage sont regroupées dans une seule ligne. Le hint
_l_versions_(N)récupère les données d'horodatage pour toutes les colonnes ne faisant pas partie de la clé primaire.SELECT /*+ _l_versions_(2) */ c1, c2, c3, c2_l_ts, c3_l_ts FROM t_test_versions_2;Le résultat suivant est renvoyé :
+----+------+------+---------+---------+ | 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 | +----+------+------+---------+---------+ -
Exemple 5 : Le nombre de versions renvoyées est limité par l'attribut 'VERSIONS' de la table. Par exemple, bien que cette requête demande six versions avec
_l_versions_(6), elle n'en renvoie que cinq car la table a été créée avec 'VERSIONS'='5'.SELECT /*+ _l_versions_(6) */ c1, c2, c2_l_ts FROM t_test_versions_2 WHERE c1=2;Le résultat suivant est renvoyé :
+----+----+---------+ | c1 | c2 | c2_l_ts | +----+----+---------+ | 2 | 6 | 2006 | | 2 | 5 | 2005 | | 2 | 4 | 2004 | | 2 | 3 | 2003 | | 2 | 2 | 2002 | +----+----+---------+
-