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èle | Lignes de même clé | Usage |
|---|---|---|
| Duplicate Key | Toutes conservées | Événements, logs, données brutes |
| Unique Key | Dernière version conservée | Dimensions, données mises à jour |
| Aggregate Key | Agré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 AUTOlaisse la plateforme choisir le nombre de buckets.
Exemples
| Table | Modèle | Partition | Distribution |
|---|---|---|---|
| Événements | Duplicate Key | Par mois sur dt | HASH(user_id) |
| Clients | Unique Key | Aucune | HASH(customer_id) |
| Métriques quotidiennes | Aggregate Key | Par mois sur dt | HASH(site_id) |