Organisation des ressources
Organisations
Projets BigQuery vs services ClickHouse Cloud
- Un groupe de nœuds de calcul (actuellement, 2 nœuds pour un service du tier Development et 3 pour un service du tier Production). Pour ces nœuds, ClickHouse Cloud prend en charge la mise à l’échelle verticale et horizontale, manuellement ou automatiquement.
- Un répertoire de stockage d’objets dans lequel le service stocke toutes les données.
- Un endpoint (ou plusieurs endpoints créés via la console UI de ClickHouse Cloud) - une URL de service que vous utilisez pour vous connecter au service (par exemple,
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443)
Jeux de données BigQuery vs bases de données ClickHouse Cloud
Dossiers BigQuery
Réservations de slots BigQuery et quotas
Autorisations
Types de données
INT64, NUMERIC, BIGNUMERIC et FLOAT64. À l’inverse, ClickHouse propose plusieurs niveaux de précision pour les décimaux, les flottants et les entiers. Grâce à ces types de données, vous pouvez optimiser le stockage et réduire la surcharge mémoire, ce qui se traduit par des requêtes plus rapides et une consommation de ressources moindre. Ci-dessous, nous indiquons la correspondance entre chaque type BigQuery et son type ClickHouse équivalent :
| BigQuery | ClickHouse |
|---|---|
| ARRAY | Array(t) |
| NUMERIC | Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S) |
| BIG NUMERIC | Decimal256(S) |
| BOOL | Bool |
| BYTES | FixedString |
| DATE | Date32 (avec une plage plus restreinte) |
| DATETIME | DateTime, DateTime64 (plage plus restreinte, précision supérieure) |
| FLOAT64 | Float64 |
| GEOGRAPHY | Geo Data Types |
| INT64 | UInt8, UInt16, UInt32, UInt64, UInt128, UInt256, Int8, Int16, Int32, Int64, Int128, Int256 |
| INTERVAL | NA - pris en charge comme expression ou via des fonctions |
| JSON | JSON |
| STRING | String (octets) |
| STRUCT | Tuple, Nested |
| TIME | DateTime64 |
| TIMESTAMP | DateTime64 |
Techniques d’accélération des requêtes
Dans BigQuery, une table peut avoir des contraintes de clé primaire et de clé étrangère. En général, les clés primaires et étrangères sont utilisées dans les bases de données relationnelles pour garantir l’intégrité des données. Une valeur de clé primaire est normalement unique pour chaque ligne et n’est pas
NULL. Chaque valeur de clé étrangère d’une ligne doit être présente dans la colonne de clé primaire de la table référencée, ou être NULL. Dans BigQuery, ces contraintes ne sont pas appliquées, mais l’optimiseur de requêtes peut utiliser ces informations pour optimiser davantage les requêtes.
Dans ClickHouse, une table peut également avoir une clé primaire. Comme dans BigQuery, ClickHouse n’impose pas l’unicité des valeurs de la colonne de clé primaire d’une table. Contrairement à BigQuery, les données d’une table sont stockées sur disque triées selon les colonnes de la clé primaire. L’optimiseur de requêtes exploite cet ordre de tri pour éviter de retrier les données, réduire l’utilisation de la mémoire pour les jointures et permettre un arrêt anticipé avec les clauses LIMIT. Contrairement à BigQuery, ClickHouse crée automatiquement un index primaire (sparse) à partir des valeurs des colonnes de la clé primaire. Cet index est utilisé pour accélérer toutes les requêtes qui contiennent des filtres sur les colonnes de la clé primaire. ClickHouse ne prend actuellement pas en charge les contraintes de clé étrangère.
Index secondaires (disponibles uniquement dans ClickHouse)
- Index Bloom Filter:
- Utilisé pour accélérer les requêtes avec des conditions d’égalité (par ex. : =, IN).
- Utilise des structures de données probabilistes pour déterminer si une valeur existe dans un bloc de données.
- Index Token Bloom Filter:
- Semblable à un index Bloom Filter, mais utilisé pour les chaînes tokenisées et adapté aux requêtes de recherche en texte intégral.
- Index Min-Max:
- Conserve les valeurs minimale et maximale d’une colonne pour chaque part de données.
- Permet d’éviter la lecture des parts de données qui ne se situent pas dans la plage spécifiée.
Index de recherche
Index vectoriels
Partitionnement
Clustering
Vues matérialisées
Interroger les vues matérialisées
Transactions
Fonctions d’agrégation
- BigQuery propose 18 fonctions d’agrégation et 4 fonctions d’agrégation approximatives.
- ClickHouse dispose de plus de 150 fonctions d’agrégation prêtes à l’emploi, ainsi que de puissants combinateurs d’agrégation pour étendre le comportement des fonctions d’agrégation prêtes à l’emploi. Par exemple, vous pouvez appliquer plus de 150 fonctions d’agrégation prêtes à l’emploi à des tableaux plutôt qu’à des lignes d’une table, simplement en les appelant avec le suffixe -Array. Avec le suffixe -Map, vous pouvez appliquer n’importe quelle fonction d’agrégation à des maps. Et avec le suffixe -ForEach, vous pouvez appliquer n’importe quelle fonction d’agrégation à des tableaux imbriqués.
Sources de données et formats de fichiers
- ClickHouse prend nativement en charge le chargement de données dans plus de 90 formats de fichiers à partir de pratiquement n’importe quelle source de données
- BigQuery prend en charge 5 formats de fichiers et 19 sources de données
Fonctionnalités du langage SQL
Tableaux
groupArray pour transformer (temporairement) certaines valeurs de lignes d’une table en tableau. Ce tableau peut ensuite être traité facilement à l’aide de fonctions de tableau, puis le résultat peut être reconverti en lignes individuelles de la table via la fonction arrayJoin.
Comme ClickHouse SQL prend en charge les fonctions lambda d’ordre supérieur, de nombreuses opérations avancées sur les tableaux peuvent être réalisées simplement en appelant l’une des fonctions de tableau d’ordre supérieur intégrées, au lieu de reconvertir temporairement les tableaux en tables, comme c’est souvent nécessaire dans BigQuery, par exemple pour le filtrage ou la combinaison de tableaux. Dans ClickHouse, ces opérations se résument à un simple appel aux fonctions d’ordre supérieur arrayFilter et arrayZip, respectivement.
Ci-dessous, nous proposons une correspondance des opérations sur les tableaux entre BigQuery et ClickHouse :
Créer un tableau avec un élément pour chaque ligne d’une sous-requête
BigQuery
Fonction ARRAY
UNNEST
UNNEST
UNNEST
UNNEST