Aller au contenu principal
SaaS · On-premise

Concevoir une table

Quatre choix déterminent les performances d'une table : son modèle, sa clé de tri, son partitionnement et sa distribution.

CREATE TABLE analytics.events (
dt DATE,
user_id BIGINT,
event_type VARCHAR(32),
payload JSON
)
DUPLICATE KEY(dt, user_id) -- modèle et clé de tri
AUTO PARTITION BY RANGE (date_trunc(dt, 'month')) () -- une partition par mois
DISTRIBUTED BY HASH(user_id) BUCKETS AUTO; -- distribution

Modèle​

ModèleLignes de même cléUsage
Duplicate KeyToutes conservéesÉvénements, logs, données brutes
Unique KeyDernière version conservéeDimensions, données mises à jour
Aggregate KeyAgrégées (SUM, MAX…)Métriques pré-agrégées

Détails et exemples : Modèles de données.

Clé de tri​

Les colonnes de la clé (DUPLICATE KEY, UNIQUE KEY ou AGGREGATE KEY) fixent l'ordre de stockage. Placez en premier les colonnes les plus filtrées.

Partitionnement​

Découpe la table par plage (RANGE, en général une date) ou par liste de valeurs (LIST). Une requête filtrée sur la colonne de partition ne lit que les partitions concernées, et la purge se fait par partition (ALTER TABLE … DROP PARTITION).

AUTO PARTITION crée les partitions au fil des chargements. Ne partitionnez pas une petite table.

Distribution​

Répartit les lignes en buckets lus en parallèle.

  • HASH(colonne) : une colonne à forte cardinalité, souvent utilisée en jointure (user_id, order_id).
  • RANDOM : aucune colonne ne s'y prête.
  • BUCKETS AUTO laisse la plateforme choisir le nombre de buckets.

Exemples​

TableModèlePartitionDistribution
ÉvénementsDuplicate KeyPar mois sur dtHASH(user_id)
ClientsUnique KeyAucuneHASH(customer_id)
Métriques quotidiennesAggregate KeyPar mois sur dtHASH(site_id)