Comment installer et utiliser ClickHouse sur Debian 9

L’auteur a sélectionné le Free and Open Source pour recevoir un don dans le cadre du Write for DOnations programme.

introduction

https://clickhouse.yandex [ClickHouse] est une base de données d’analyse à code source ouverte et à colonnes créée par https://yandex.com [Yandex] pour OLAP. et des cas d’utilisation de données volumineuses. La prise en charge de ClickHouse pour le traitement des requêtes en temps réel le rend approprié pour les applications nécessitant des résultats analytiques inférieurs à une seconde. Le langage de requête de ClickHouse est un dialecte de SQL qui offre de puissantes capacités de requête déclaratives tout en offrant une familiarité et une courbe d’apprentissage plus courte pour l’utilisateur final.

Les bases de données Column-oriented stockent les enregistrements dans des blocs groupés par colonnes plutôt que par rangées. En ne chargeant pas les données des colonnes absentes de la requête, les bases de données orientées colonnes perdent moins de temps à lire les données lors de l’exécution des requêtes. Par conséquent, ces bases de données peuvent calculer et renvoyer des résultats beaucoup plus rapidement que les systèmes traditionnels basés sur des lignes pour certaines charges de travail, telles que OLAP.

Les systèmes de traitement analytique en ligne (OLAP) permettent d’organiser de grandes quantités de données et d’effectuer des requêtes complexes. Ils sont capables de gérer des pétaoctets de données et de renvoyer rapidement les résultats de la requête. OLAP est ainsi utile pour travailler dans des domaines tels que la science des données et l’analyse commerciale.

Dans ce tutoriel, vous installerez le serveur de base de données ClickHouse et le client sur votre ordinateur. Vous utiliserez le SGBD pour des tâches classiques et activerez éventuellement un accès distant à partir d’un autre serveur afin de pouvoir vous connecter à la base de données à partir d’un autre ordinateur. Ensuite, vous testerez ClickHouse en modélisant et en interrogeant des exemples de données de visite de sites Web.

Conditions préalables

  • Un serveur Debian 9 avec une configuration d’utilisateur et de pare-feu non root activée + sudo +. Vous pouvez suivre la configuration initiale du serveur tutorial pour créer l’utilisateur et configurer le pare-feu.

  • (Facultatif) Un serveur Debian 9 secondaire avec une configuration utilisateur + racine et un pare-feu activés + sudo +. Vous pouvez suivre la configuration initiale du serveur tutorial.

Étape 1 - Installation de ClickHouse

Dans cette section, vous installerez le serveur ClickHouse et les programmes clients à l’aide de + apt-get.

Commencez par SSH sur votre serveur en exécutant:

ssh @

+ dirmngr + est un serveur permettant de gérer les certificats et les clés. Il est requis pour l’ajout et la vérification des clés du référentiel distant. Installez-le en exécutant:

sudo apt-get install -y dirmngr

Yandex maintient un référentiel APT doté de la dernière version de ClickHouse. Ajoutez la clé GPG du référentiel afin de pouvoir télécharger en toute sécurité les packages ClickHouse validés:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4

Vous verrez une sortie semblable à celle-ci:

Output
Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4

gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1

La sortie confirme qu’elle a bien été vérifiée et a ajouté la clé.

Ajoutez le référentiel à votre liste de référentiels APT en exécutant:

echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list

Ici, vous avez redirigé la sortie de + echo + vers + + sudo tee + afin que cette sortie puisse être imprimée dans un fichier appartenant à la racine.

Maintenant, lancez + apt-get update pour mettre à jour vos paquets:

sudo apt-get update

Les packages + clickhouse-server et` + clickhouse-client` seront désormais disponibles pour l’installation. Installez-les avec:

sudo apt-get install -y clickhouse-server clickhouse-client

Vous avez installé le serveur et le client ClickHouse avec succès. Vous êtes maintenant prêt à démarrer le service de base de données et à vous assurer qu’il fonctionne correctement.

Étape 2 - Démarrage du service

Le package + clickhouse-server + que vous avez installé dans la section précédente crée un service + systemd +, qui effectue des opérations telles que le démarrage, l’arrêt et le redémarrage du serveur de base de données. https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [+ systemd +] est un système init pour Linux permettant d’initialiser et de gérer des services. Dans cette section, vous allez démarrer le service et vérifier qu’il fonctionne correctement.

Démarrez le service + clickhouse-server + en lançant:

sudo service clickhouse-server start

La commande précédente n’affichera aucune sortie. Pour vérifier que le service fonctionne correctement, exécutez:

sudo service clickhouse-server status

Vous verrez une sortie semblable à celle-ci:

Output
●  - ClickHouse Server (analytic DBMS for big data)
  Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
  Active:  since Sat 2018-12-22 07:23:20 UTC; 1h 9min ago
Main PID: 27101 (ClickHouse-serv)
   Tasks: 34 (limit: 1152)
  CGroup: /system.slice/ClickHouse-server.service
          └─27101 /usr/bin/ClickHouse-server --config=/etc/ClickHouse-server/config.xml

La sortie indique que le serveur est en cours d’exécution.

Vous avez démarré le serveur ClickHouse et pourrez désormais utiliser le programme CLI + clickhouse-client + pour vous connecter au serveur.

Étape 3 - Création de bases de données et de tables

Dans ClickHouse, vous pouvez créer et supprimer des bases de données en exécutant des instructions SQL directement dans l’invite de base de données interactive. Les instructions consistent en des commandes respectant une syntaxe particulière qui indiquent au serveur de base de données d’effectuer l’opération demandée avec les données requises. Vous créez des bases de données en utilisant la syntaxe + CREATE DATABASE +. Pour créer une base de données, démarrez d’abord une session client en exécutant la commande suivante:

clickhouse-client

Cette commande vous connecte à l’invite du client où vous pouvez exécuter des instructions ClickHouse SQL pour effectuer des actions telles que:

  • Création, mise à jour et suppression de bases de données, tables, index, partitions et vues.

  • Exécution de requêtes pour extraire des données éventuellement filtrées et regroupées à l’aide de différentes conditions.

Dans cette étape, avec le client ClickHouse prêt pour l’insertion de données, vous allez créer une base de données et une table. Pour les besoins de ce didacticiel, vous allez créer une base de données nommée `, puis créer une table nommée ` permettant de suivre les durées des visites sur le site Web.

Maintenant que vous êtes à l’invite de commande ClickHouse, créez votre base de données ++ en exécutant:

CREATE DATABASE ;

La sortie suivante indique que vous avez créé la base de données:

Output
CREATE DATABASE

Ok.

0 rows in set. Elapsed: 0.003 sec.

Une table ClickHouse est similaire aux tables d’autres bases de données relationnelles. il contient une collection de données connexes dans un format structuré. Vous pouvez spécifier des colonnes avec leurs types, ajouter des lignes de données et exécuter différents types de requêtes sur des tables.

La syntaxe de création de tables dans ClickHouse suit cet exemple de structure:

CREATE TABLE
(
    ,
    ,
   ...
) ENGINE =

Les valeurs + nom_table + et + nom_colonne + peuvent être n’importe quel identificateur ASCII valide. ClickHouse prend en charge un large éventail de types de colonnes; les plus populaires sont:

  • + UInt64 +: utilisé pour stocker des valeurs entières comprises entre 0 et 18446744073709551615.

  • + Float64 +: utilisé pour stocker des nombres à virgule flottante tels que 2039.23, 10.5, etc.

  • + String +: utilisé pour stocker des caractères de longueur variable. Il ne nécessite pas d’attribut de longueur maximale, car il peut stocker des longueurs arbitraires.

  • + Date +: utilisé pour stocker les dates qui suivent le format + AAAA-MM-JJ +.

  • + DateTime +: utilisé pour stocker les dates associées à l’heure et suit le format + AAAA-MM-JJ HH: MM: SS +.

Après les définitions de colonne, vous spécifiez le moteur utilisé pour la table. Dans ClickHouse, Engines détermine la structure physique des données sous-jacentes, les fonctionnalités d’interrogation de la table, ses modes d’accès simultanés et la prise en charge des index. Différents types de moteurs sont adaptés aux différentes applications. Le type de moteur le plus couramment utilisé et le plus largement applicable est + MergeTree +.

Maintenant que vous avez une vue d’ensemble de la création d’une table, vous allez créer une table. Commencez par confirmer la base de données que vous allez modifier:

USE ;

La sortie suivante montre que vous avez basculé vers la base de données ++ à partir de la base de données + default +:

Output
USE

Ok.

0 rows in set. Elapsed: 0.001 sec.

Le reste de ce guide supposera que vous exécutez des instructions dans le contexte de cette base de données.

Créez votre table ++ en lançant cette commande:

CREATE TABLE  (
,
,
,

) ENGINE =
PRIMARY KEY
ORDER BY ;

Voici un aperçu de ce que la commande fait. Vous créez une table nommée «++» à quatre colonnes:

  • + id +: la colonne de clé primaire. À l’instar d’autres systèmes de SGBDR, une colonne de clé primaire dans ClickHouse identifie de manière unique une ligne. chaque ligne doit avoir une valeur unique pour cette colonne.

  • + duration +: une colonne flottante utilisée pour stocker la durée de chaque visite en secondes. Les colonnes + float + peuvent stocker des valeurs décimales telles que 12.50.

  • + url: colonne de chaîne contenant l’URL visitée, telle que` + http: // example.com`.

  • + created +: colonne de date et d’heure qui indique quand la visite a eu lieu.

Après les définitions de colonne, vous spécifiez + MergeTree + comme moteur de stockage pour la table. La famille MergeTree est recommandée pour les bases de données de production en raison de sa prise en charge optimisée des grandes insertions en temps réel, de sa robustesse et de ses requêtes. En outre, les moteurs MergeTree prennent en charge le tri des lignes par clé primaire, le partitionnement des lignes, ainsi que la réplication et l’échantillonnage des données.

Si vous souhaitez utiliser ClickHouse pour archiver des données qui ne sont pas interrogées souvent ou pour stocker des données temporaires, vous pouvez utiliser la Log family des moteurs à optimiser pour ce cas d’utilisation.

Une fois les définitions de colonne définies, vous définissez d’autres options au niveau de la table. La clause + PRIMARY KEY définit` + id + en tant que colonne de clé primaire et la clause + ORDER BY` stockera les valeurs triées par la colonne + id +. Une clé primaire identifie de manière unique une ligne et est utilisée pour accéder efficacement à une seule ligne et pour une colocation efficace des lignes.

Lors de l’exécution de l’instruction create, vous verrez la sortie suivante:

OutputCREATE TABLE visits
(
   id UInt64,
   duration Float64,
   url String,
   created DateTime
)
ENGINE = MergeTree()
PRIMARY KEY id
ORDER BY id

Ok.

0 rows in set. Elapsed: 0.010 sec.

Dans cette section, vous avez créé une base de données et un tableau pour suivre les données de visites de sites Web. À l’étape suivante, vous allez insérer des données dans la table, mettre à jour des données existantes et les supprimer.

Étape 4 - Insertion, mise à jour et suppression de données et de colonnes

Dans cette étape, vous utiliserez votre table ++ pour insérer, mettre à jour et supprimer des données. La commande suivante est un exemple de syntaxe pour l’insertion de lignes dans une table ClickHouse:

INSERT INTO  VALUES (, );

Maintenant, insérez quelques lignes d’exemples de données de visite de sites Web dans votre table ++ en exécutant chacune des instructions suivantes:

INSERT INTO  VALUES ();
INSERT INTO  VALUES ();
INSERT INTO  VALUES ();
INSERT INTO  VALUES ();

La sortie suivante est répétée pour chaque instruction insert.

Output
INSERT INTO  VALUES

Ok.

1 rows in set. Elapsed: 0.004 sec.

La sortie de chaque ligne indique que vous l’avez insérée avec succès dans la table ++.

Vous allez maintenant ajouter une colonne supplémentaire à la table ++. Lors de l’ajout ou de la suppression de colonnes de tables existantes, ClickHouse prend en charge la syntaxe + ALTER +.

Par exemple, la syntaxe de base pour ajouter une colonne à une table est la suivante:

ALTER TABLE  ADD COLUMN ;

Ajoutez une colonne nommée ++ qui stockera l’emplacement des visites sur un site Web en exécutant l’instruction suivante:

ALTER TABLE  ADD COLUMN ;

Vous verrez une sortie semblable à celle-ci:

OutputALTER TABLE
   ADD COLUMN
   location String


Ok.

0 rows in set. Elapsed: 0.014 sec.

La sortie montre que vous avez ajouté la colonne ++ avec succès.

À partir de la version 19.3.6, ClickHouse ne prend pas en charge la mise à jour et la suppression de lignes de données individuelles en raison de contraintes d’implémentation. Cependant, ClickHouse prend en charge les mises à jour et les suppressions en bloc et dispose d’une syntaxe SQL distincte pour ces opérations afin de mettre en évidence leur utilisation non standard.

La syntaxe suivante est un exemple de mise à jour en masse de lignes:

ALTER TABLE  UPDATE  WHERE ;

Vous allez exécuter l’instruction suivante pour mettre à jour la colonne + url + de toutes les lignes ayant une + durée + inférieure à 15. Entrez-le dans l’invite de la base de données pour exécuter:

ALTER TABLE  UPDATE url = '' WHERE ;

La sortie de l’instruction de mise à jour en bloc sera la suivante:

Output
ALTER TABLE
   UPDATE url = '' WHERE duration < 15


Ok.

0 rows in set. Elapsed: 0.003 sec.

La sortie indique que votre requête de mise à jour s’est terminée avec succès. Le +0 lignes de l’ensemble + dans la sortie indique que la requête n’a renvoyé aucune ligne; ce sera le cas pour toutes les requêtes de mise à jour et de suppression.

L’exemple de syntaxe pour la suppression en bloc de lignes est similaire à la mise à jour de lignes et présente la structure suivante:

ALTER TABLE  DELETE WHERE ;

Pour tester la suppression de données, exécutez l’instruction suivante pour supprimer toutes les lignes dont la durée + duration + est inférieure à 5:

ALTER TABLE  DELETE WHERE ;

La sortie de l’instruction de suppression en bloc sera semblable à:

Output
ALTER TABLE
   DELETE WHERE duration < 5


Ok.

0 rows in set. Elapsed: 0.003 sec.

La sortie confirme que vous avez supprimé les lignes d’une durée inférieure à cinq secondes.

Pour supprimer des colonnes de votre table, la syntaxe suivrait cet exemple de structure:

ALTER TABLE  DROP COLUMN ;

Supprimez la colonne + location + que vous avez ajoutée précédemment en exécutant ce qui suit:

ALTER TABLE  DROP COLUMN ;

La sortie + DROP COLUMN + confirmant que vous avez supprimé la colonne sera comme suit:

OutputALTER TABLE
   DROP COLUMN
   location String


Ok.

0 rows in set. Elapsed: 0.010 sec.

Maintenant que vous avez correctement inséré, mis à jour et supprimé des lignes et des colonnes dans votre table ++, vous pouvez maintenant interroger des données à l’étape suivante.

Étape 5 - Interrogation des données

Le langage de requête de ClickHouse est un dialecte personnalisé de SQL avec des extensions et des fonctions adaptées aux charges de travail d’analyse. Dans cette étape, vous allez exécuter des requêtes de sélection et d’agrégation pour extraire des données et des résultats de votre table ++.

Les requêtes de sélection vous permettent d’extraire des lignes et des colonnes de données filtrées par les conditions que vous spécifiez, ainsi que des options telles que le nombre de lignes à renvoyer. Vous pouvez sélectionner des lignes et des colonnes de données en utilisant la syntaxe + SELECT +. La syntaxe de base pour les requêtes + SELECT + est la suivante:

SELECT  FROM  WHERE ;

Exécutez l’instruction suivante pour récupérer les valeurs + url et` + duration of` pour les lignes où + url + est + http: // example.com +.

SELECT url, duration FROM  WHERE url = 'http://example2.com' LIMIT 2;

Vous verrez la sortie suivante:

OutputSELECT
   url,
   duration
FROM
WHERE url = 'http://example2.com'
LIMIT 2

┌─url─────────────────┬─duration─┐
│ http://example2.com │     10.5 │
└─────────────────────┴──────────┘
┌─url─────────────────┬─duration─┐
│ http://example2.com │       13 │
└─────────────────────┴──────────┘

2 rows in set. Elapsed: 0.013 sec.

La sortie a renvoyé deux lignes correspondant aux conditions spécifiées. Maintenant que vous avez sélectionné les valeurs, vous pouvez passer à l’exécution de requêtes d’agrégation.

Les requêtes d’agrégation sont des requêtes qui opèrent sur un ensemble de valeurs et renvoient des valeurs de sortie uniques. Dans les bases de données d’analyse, ces requêtes sont exécutées fréquemment et sont bien optimisées par la base de données. Certaines fonctions d’agrégat prises en charge par ClickHouse sont:

  • + count +: renvoie le nombre de lignes correspondant aux conditions spécifiées.

  • + sum +: renvoie la somme des valeurs de colonne sélectionnées.

  • + avg +: renvoie la moyenne des valeurs de colonne sélectionnées.

Certaines fonctions d’agrégation spécifiques à ClickHouse incluent:

  • + uniq +: renvoie un nombre approximatif de lignes distinctes mises en correspondance.

  • + topK +: renvoie un tableau des valeurs les plus fréquentes d’une colonne spécifique en utilisant un algorithme d’approximation.

Pour illustrer l’exécution des requêtes d’agrégation, vous calculerez la durée totale des visites en exécutant la requête + sum +:

SELECT  FROM ;

Vous verrez une sortie semblable à celle-ci:

Output
SELECT
FROM

┌─SUM(duration)─┐
│          63.7 │
└───────────────┘

1 rows in set. Elapsed: 0.010 sec.

Maintenant, calculez les deux premières URL en exécutant:

SELECT  FROM ;

Vous verrez une sortie semblable à celle-ci:

OutputSELECT topK(2)(url)
FROM visits

┌─topK(2)(url)──────────────────────────────────┐
│ ['http://example2.com','http://example1.com'] │
└───────────────────────────────────────────────┘

1 rows in set. Elapsed: 0.010 sec.

Maintenant que vous avez interrogé votre table ++ avec succès, vous supprimerez des tables et des bases de données à l’étape suivante.

Étape 6 - Suppression de tables et de bases de données

Dans cette section, vous allez supprimer votre table ` et votre base de données `.

La syntaxe pour supprimer des tables suit cet exemple:

DROP TABLE ;

Pour supprimer la table ++, exécutez l’instruction suivante:

DROP TABLE ;

Vous verrez la sortie suivante déclarant que vous avez supprimé la table avec succès:

outputDROP TABLE

Ok.

0 rows in set. Elapsed: 0.005 sec.

Vous pouvez supprimer des bases de données en utilisant la syntaxe + DROP database +. Pour supprimer la base de données ++, exécutez l’instruction suivante:

DROP DATABASE ;

Le résultat obtenu montre que vous avez supprimé la base de données avec succès.

Output
DROP DATABASE

Ok.

0 rows in set. Elapsed: 0.003 sec.

Vous avez supprimé des tables et des bases de données à cette étape. Maintenant que vous avez créé, mis à jour et supprimé des bases de données, des tables et des données dans votre instance ClickHouse, vous allez activer l’accès à distance à votre serveur de base de données dans la section suivante.

Étape 7 - Configuration des règles de pare-feu (facultatif)

Si vous ne souhaitez utiliser ClickHouse que localement avec des applications s’exécutant sur le même serveur, ou si aucun pare-feu n’est activé sur votre serveur, vous n’avez pas besoin de remplir cette section. Si au lieu de cela, vous vous connecterez au serveur de base de données ClickHouse à distance, suivez cette étape.

Actuellement, votre serveur a un pare-feu activé qui désactive votre adresse IP publique qui accède à tous les ports. Vous devez suivre les deux étapes suivantes pour autoriser l’accès à distance:

  • Modifier la configuration de ClickHouse et lui permettre d’écouter sur toutes les interfaces.

  • Ajoutez une règle de pare-feu autorisant les connexions entrantes au port + 8123 +, qui est le port HTTP exécuté par le serveur ClickHouse.

Si vous êtes dans l’invite de base de données, quittez-la en tapant + CTRL + D +.

Editez le fichier de configuration en exécutant:

sudo nano /etc/clickhouse-server/config.xml

Puis décommentez la ligne contenant + <! - <listen_host> 0.0.0.0 </ listen_host> → +, comme le fichier suivant:

/etc/clickhouse-server/config.xml

...
<interserver_http_host>example.yandex.ru</interserver_http_host>
   -->

   <!-- Listen specified host. use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere. -->
   <!-- <listen_host>::</listen_host> -->
   <!-- Same for hosts with disabled ipv6: -->


   <!-- Default values - try listen localhost on ipv4 and ipv6: -->
   <!--
   <listen_host>::1</listen_host>
   <listen_host>127.0.0.1</listen_host>
   -->
...

Enregistrez le fichier et quittez + nano +. Pour que la nouvelle configuration à appliquer, redémarrez le service en exécutant:

sudo service clickhouse-server restart

Vous ne verrez aucune sortie de cette commande. Le serveur ClickHouse écoute le port + 8123 + pour les connexions HTTP et le port + 9000 + pour les connexions de + clickhouse-client +. Autorisez l’accès aux deux ports pour l’adresse IP de votre deuxième serveur avec la commande suivante:

sudo ufw allow from /32 to any port 8123
sudo ufw allow from /32 to any port 9000

La sortie suivante des deux commandes indique que vous avez activé l’accès aux deux ports:

OutputRule added

ClickHouse sera désormais accessible à partir de l’IP que vous avez ajoutée. N’hésitez pas à ajouter d’autres adresses IP, telles que l’adresse de votre ordinateur local, si nécessaire.

Pour vérifier que vous pouvez vous connecter au serveur ClickHouse à partir de la machine distante, suivez d’abord les étapes de l’étape 1 de ce didacticiel sur le second serveur et assurez-vous que le logiciel + clickhouse-client + y est installé.

Maintenant que vous êtes connecté au deuxième serveur, démarrez une session client en exécutant:

clickhouse-client --host

La sortie suivante indique que vous vous êtes connecté avec succès au serveur:

OutputClickHouse client version 19.3.6.
Connecting to :9000 as user default.
Connected to ClickHouse server version 19.3.6 revision 54415.

:)

Au cours de cette étape, vous avez activé l’accès à distance à votre serveur de base de données ClickHouse en ajustant vos règles de pare-feu.

Conclusion

Vous avez correctement configuré une instance de base de données ClickHouse sur votre serveur et créé une base de données et une table, ajouté des données, effectué des requêtes et supprimé la base de données. Dans la documentation de ClickHouse, vous pouvez lire leurs informations sur leurs benchmarks par rapport à d’autres bases de données d’analyse open source et commerciales et à des références générales documents. En outre, features ClickHouse offre un traitement des requêtes distribuées sur plusieurs serveurs pour améliorer les performances et protéger contre la perte de données en stockant des données sur différents sites https: //www.digitalocean. com / communauté / tutoriels / arrangement-base-données-sharding [fragments].