t1 dans MongoDB pour suivre les commandes des clients :
t1 dans ClickHouse contiendra la ligne suivante :
Schéma de la table
_id: Clé primaire de MongoDBdoc: document MongoDB répliqué au format de type de données JSON_peerdb_synced_at: Indique quand la ligne a été synchronisée pour la dernière fois_peerdb_version: Suit la version de la ligne ; incrémentée lorsque la ligne est mise à jour ou supprimée_peerdb_is_deleted: Indique si la ligne est supprimée
Moteur de table ReplacingMergeTree
ReplacingMergeTree. Avec ce moteur, les mises à jour sont modélisées comme des insertions avec une version plus récente (_peerdb_version) du document pour une clé primaire donnée (_id), ce qui permet de gérer efficacement les mises à jour, les remplacements et les suppressions sous forme d’insertions versionnées.
ReplacingMergeTree supprime les doublons de manière asynchrone, en tâche de fond. Pour garantir l’absence de doublons pour une même ligne, utilisez le modificateur FINAL. Par exemple :
Gestion des suppressions
_peerdb_is_deleted. En général, vous voudrez les exclure de vos requêtes à l’aide d’un filtre :
Interroger des données JSON
Query
Result
^ :
Query
Result
Type Dynamic
Dynamic. Le type Dynamic permet à ClickHouse de stocker des valeurs de n’importe quel type sans connaître ce type à l’avance. Vous pouvez le vérifier avec la fonction toTypeName :
Query
Result
dynamicType. Notez qu’il est possible d’avoir différents types de données pour un même nom de champ d’une ligne à l’autre :
Query
Result
Query
Result
Query
Result
Query
Result
Conversion de type d’un champ
sum sur un type Dynamic, vous obtenez l’erreur suivante :
CAST ou la syntaxe :: :
Query
Result
La conversion du type Dynamic vers le type de données sous-jacent (déterminé par
dynamicType) est très performante, car ClickHouse stocke déjà la valeur en interne dans ce type sous-jacent.Mise à plat du JSON
Vue standard
Vue matérialisée actualisable
FINAL ne s’exécute qu’une seule fois lors de l’actualisation, ce qui évite d’avoir à utiliser FINAL dans les requêtes suivantes sur la table de destination.
L’inconvénient est que les données de la table de destination ne sont à jour qu’à hauteur de la dernière actualisation. Pour de nombreux cas d’usage, des intervalles d’actualisation de quelques minutes à quelques heures offrent un bon équilibre entre fraîcheur des données et performances des requêtes.
flattened_t1 directement, sans le modificateur FINAL :
Vue matérialisée incrémentielle
FINAL dans votre vue matérialisée, car chaque mise à jour déclenchera une opération de fusion. À la place, vous pouvez dédupliquer les données au moment de la requête en créant une vue standard au-dessus de la vue matérialisée.
flattened_t1_final comme suit :