Le module tsm_system_time
fournit la méthode
d'échantillonage de table SYSTEM_TIME
, qui peut être
utilisé par la clause TABLESAMPLE
d'une commande
SELECT
.
Cette méthode d'échantillonnage d'une table accepte un unique argument, de type nombre à virgule flottante, correspondant au nombre maximum de millisecondes passé à lire la table. Ceci vous donne un contrôle direct sur la durée de la requête, au prix d'une taille d'échantillon difficile à prédire. Ce résultat contiendra autant de lignes qu'il a été possible d'en lire pendant la durée spécifiée, sauf si la table a pu être lue entièrement avant.
De la même façon que la méthode interne SYSTEM
,
SYSTEM_TIME
réalise un échantillonnage au niveau des
blocs de table, si bien que l'échantillonnage n'est pas complètement
aléatoire mais peut être sensible à un effet de regroupement (clustering),
surtout si un petit nombre de lignes est sélectionné.
SYSTEM_TIME
ne supporte pas la clause
REPEATABLE
.
Ce module est considéré comme « trusted », ce qui signifie qu'il
peut être installé par des utilisateurs simples (sans attribut
SUPERUSER
) et qui ont l'attribut
CREATE
sur la base de données courante.
Voici un exemple de sélection d'un échantillon d'une table avec
SYSTEM_TIME
. Il faut tout d'abord installer
l'extension :
CREATE EXTENSION tsm_system_time;
Puis vous pouvez l'utiliser dans une commande SELECT
,
par exemple :
SELECT * FROM ma_table TABLESAMPLE SYSTEM_TIME(1000);
Cette commande renverra autant de lignes de
ma_table
qu'il a pu en lire en une seconde (1000
millisecondes). Bien sûr, si toute la table peut être lue en moins d'une
seconde, toutes les lignes seront renvoyées.