One place for hosting & domains

      ClickHouse

      Installieren und Verwenden von ClickHouse auf Debian 10


      Der Autor hat den Free and Open Source Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      ClickHouse ist eine Open-Source-basierte, spaltenorientierte Analysedatenbank, die von Yandex für OLAP- und Big-Data-Anwendungsfälle erstellt wurde. Unterstützung von ClickHouse für eine echtzeitbasierte Verarbeitung von Abfragen sorgt dafür, dass sich ClickHouse für Anwendungen eignet, die in Sekundenbruchteilen Ergebnisse erfordern. Die Abfragesprache von ClickHouse ist ein SQL-Dialekt, der leistungsfähige deklarative Abfragefunktionen bietet, während Endbenutzer von Vertrautheit und einer flacheren Lernkurve profitieren.

      Spaltenorientierte Datenbanken speichern Einträge in nach Spalten (und nicht nach Zeilen) gruppierten Blöcken. Da Daten für Spalten, die in der Abfrage fehlen, nicht geladen werden, brauchen spaltenorientierte Datenbanken beim Ausführen von Abfragen weniger Zeit zum Lesen von Daten. Dadurch können diese Datenbanken bei bestimmten Workloads (wie z.B. OLAP) Ergebnisse wesentlich schneller berechnen als herkömmliche zeilenbasierte Systeme.

      Online Analytics Processing (OLAP)-Systeme ermöglichen es, große Mengen von Daten zu organisieren und komplexe Abfragen durchzuführen. Sie können Petabytes von Daten verwalten und Abfrageergebnisse schnell zurückgeben. Somit eignet sich OLAP gut für Bereiche wie Datenwissenschaft und geschäftliche Analysen.

      In diesem Tutorial installieren Sie den ClickHouse-Datenbankserver sowie den Client auf Ihrem Rechner. Sie verwenden das DBMS für typische Aufgaben und aktivieren optional den Remotezugriff von einem anderen Server, damit Sie sich von einem anderen Rechner aus mit der Datenbank verbinden können. Dann testen Sie ClickHouse, indem Sie Beispieldaten von Websitebesuchen modellieren und abfragen.

      Voraussetzungen

      • Ein Debian 10-Betriebssystem mit einem sudo-aktivierten non-root user und mit eingerichteter Firewall. Folgen Sie dem Tutorial zur Ersteinrichtung des Servers, um den Benutzer zu erstellen und die Firewall einzurichten.
      • (Optional) Ein sekundäres Debian 10-Betriebssystem mit einem sudo-aktivierten non-root user und mit eingerichteter Firewall. Folgen Sie dem Tutorial zur Ersteinrichtung des Servers.

      Schritt 1 — Installieren von ClickHouse

      In diesem Abschnitt installieren Sie die ClickHouse-Server- und Client-Programme mit apt.

      Stellen Sie zunächst eine SSH-Verbindung mit Ihrem Server her durch Ausführung von:

      dirmngr ist ein Server für die Verwaltung von Zertifikaten und Schlüsseln. Er wird benötigt, um Remote-Repository-Schlüssel zu aktivieren und zu verifizieren. Installieren Sie den Server durch Ausführung von:

      Yandex pflegt ein APT-Repository, das über die neueste Version von ClickHouse verfügt. Fügen Sie den GPG-Schlüssel des Repository hinzu, damit Sie validierte ClickHouse-Pakete sicher herunterladen können:

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

      Sie werden eine Ausgabe sehen, die der folgenden ähnelt:

      Output

      Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4 gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <milovidov@yandex-team.ru>" imported gpg: Total number processed: 1 gpg: imported: 1

      Die Ausgabe bestätigt, dass die Verifizierung erfolgreich war und der Schlüssel hinzugefügt wurde.

      Fügen Sie das Repository Ihrer Liste mit APT-Repositorys hinzu, indem Sie Folgendes ausführen:

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

      Hier haben Sie die Ausgabe von echo an sudo tee weitergeleitet, damit sich diese Ausgabe in einer Datei mit Root-Besitz ausgeben lässt.

      Führen Sie nun apt update aus, um Ihre Pakete zu aktualisieren:

      Die Pakete clickhouse-server und clickhouse-client stehen nun für die Installation bereit.

      Ab ClickHouse-Version 19.13.3 werden einige OpenSSL 1.1.1-Konfigurationen wie MinProtocol und CipherVersion nicht richtig gelesen. Um das Problem der fehlenden Kompatibilität zu umgehen, ändern Sie die OpenSSL-Konfigurationsdatei und kommentieren Sie die Zeile ssl_conf = ssl_sect in /etc/ssl/openssl.cnf aus.

      Bearbeiten Sie die Konfigurationsdatei, indem Sie Folgendes ausführen:

      • sudo nano /etc/ssl/openssl.cnf

      Kommentieren Sie dann die Zeile mit ssl_conf = ssl_sect aus, damit sie wie die folgende Datei aussieht:

      /etc/ssl/openssl.cnf

      ...
      
      tsa_name        = yes   # Must the TSA name be included in the reply?
                      # (optional, default: no)
      ess_cert_id_chain   = no    # Must the ESS cert id chain be included?
                      # (optional, default: no)
      ess_cert_id_alg     = sha1  # algorithm to compute certificate
                      # identifier (optional, default: sha1)
      [default_conf]
      #ssl_conf = ssl_sect
      
      [ssl_sect]
      ...
      

      Nachdem Sie die OpenSSL-Konfigurationsdatei gepatcht haben, können Sie nun die ClickHouse-Server- und Client-Pakete installieren. Installieren Sie sie mit:

      • sudo apt install clickhouse-server clickhouse-client

      Bei der Installation werden Sie auch dazu aufgefordert, ein Passwort für den standardmäßigen ClickHouse-Benutzer festzulegen.

      Sie haben den ClickHouse-Server und- Client erfolgreich installiert. Sie können den Datenbankdienst nun starten und überprüfen, ob er richtig ausgeführt wird.

      Schritt 2 — Starten des Dienstes

      Das im vorherigen Abschnitt installierte Paket clickhouse-server erstellt einen systemd-Dienst, der Aktionen wie Starten, Anhalten und Neustart des Datenbankservers ausführt. systemd ist ein init-System für Linux, das der Initialisierung und Verwaltung von Diensten dient. In diesem Abschnitt starten Sie den Dienst und überprüfen, ob er richtig ausgeführt wird.

      Starten Sie den Dienst clickhouse-server, indem Sie Folgendes ausführen:

      • sudo service clickhouse-server start

      Der vorherige Befehl wird keine Ausgabe anzeigen. Um zu überprüfen, ob der Dienst erfolgreich ausgeführt wird, führen Sie Folgendes aus:

      • sudo service clickhouse-server status

      Sie werden eine Ausgabe ähnlich der folgenden sehen:

      Output

      ● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data) Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled) Active: active (running) 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

      Die Ausgabe gibt an, dass der Server ausgeführt wird.

      Sie haben den ClickHouse-Server erfolgreich gestartet und können nun das CLI-Programm clickhouse-client verwenden, um eine Verbindung zum Server herzustellen.

      Schritt 3 — Erstellen von Datenbanken und Tabellen

      In ClickHouse können Sie Datenbanken erstellen und löschen, indem Sie SQL-Anweisungen direkt in der interaktiven Datenbankaufforderung ausführen. Anweisungen bestehen aus Befehlen, die einer bestimmten Syntax folgen, und den Datenbankserver dazu bringen, eine angeforderte Operation mit allen erforderlichen Daten auszuführen. Erstellen Sie Datenbanken, indem Sie die Syntax CREATE DATABASE table_name verwenden. Um eine Datenbank zu erstellen, starten Sie zunächst eine Client-Sitzung, indem Sie folgenden Befehl ausführen:

      • clickhouse-client --password

      Sie werden dazu aufgefordert, das Passwort einzugeben, das Sie bei der Installation festgelegt haben – geben Sie es ein, um die Client-Sitzung erfolgreich zu starten.

      Mit dem vorherigen Befehl können Sie sich in der Eingabeaufforderung des Clients anmelden, wo Sie ClickHouse SQL-Anweisungen ausführen können, um beispielsweise folgende Aktionen auszuführen:

      • Erstellen, Aktualisieren und Löschen von Datenbanken, Tabellen, Indizes, Partitionen und Ansichten.

      • Ausführen von Abfragen zum Abrufen von Daten, die optional mit verschiedenen Bedingungen gefiltert und gruppiert werden.

      In diesem Schritt erstellen Sie mit dem ClickHouse-Client, der bereit für die Eingabe von Daten ist, eine Datenbank und eine Tabelle. Für die Zwecke dieses Tutorials erstellen Sie eine Datenbank namens test und erzeugen darin eine Tabelle namens visits, die die Länge von Websitebesuchen verfolgt.

      Da Sie sich in der Eingabeaufforderung von ClickHouse befinden, erstellen Sie nun Ihre Datenbank test durch Ausführung von:

      Sie sehen die folgende Ausgabe, die zeigt, dass Sie die Datenbank erstellt haben:

      Output

      CREATE DATABASE test Ok. 0 rows in set. Elapsed: 0.003 sec.

      Eine ClickHouse-Tabelle ähnelt Tabellen in anderen relationalen Datenbanken; sie enthält eine Sammlung verwandter Daten in einem strukturierten Format. Sie können Spalten zusammen mit ihren Typen festlegen, Datenzeilen hinzufügen und verschiedene Arten von Abfragen in Tabellen ausführen.

      Die Syntax zur Erstellung von Tabellen in ClickHouse folgt dieser Beispielstruktur:

      CREATE TABLE table_name
      (
          column_name1 column_type [options],
          column_name2 column_type [options],
          ...
      ) ENGINE = engine
      

      Die Werte table_name und column_name können beliebige gültige ASCII-Bezeichner sein. ClickHouse unterstützt eine breite Palette von Spaltentypen; einige der beliebtesten sind:

      • UInt64: dient der Speicherung von ganzzahligen Werten im Bereich 0 bis 18446744073709551615.

      • Float64: dient der Speicherung von Gleitkommazahlen wie 2039,23, 10,5 etc.

      • String: dient der Speicherung von Zeichen mit variabler Länge. Der Wert benötigt kein Attribut für maximale Länge, da er beliebige Längen speichern kann.

      • Date: dient der Speicherung von Daten, die dem Format YYYY-MM-DD folgen.

      • DateTime: dient der Speicherung von Daten, die die Uhrzeit umfassen und dem Format YYYY-MM-DD HH:MM:SS folgen.

      Nach den Spaltendefinitionen geben Sie die für die Tabelle verwendete Engine an. In ClickHouse bestimmen Engines über die physikalische Struktur der zugrunde liegenden Daten, die Abfragefunktionen der Tabelle, die gleichzeitigen Zugriffsmodi und die Unterstützung von Indizes. Verschiedene Engine-Typen eignen sich für verschiedene Anwendungsanforderungen. Der am häufigsten verwendete und weit verbreitete Engine-Typ ist MergeTree.

      Nachdem Sie sich einen Überblick über die Tabellenerstellung verschafft haben, erstellen Sie nun eine Tabelle. Beginnen Sie mit der Auswahl der Datenbank, die Sie ändern möchten:

      Sie sehen die folgende Ausgabe, die zeigt, dass Sie von der Datenbank default zur Datenbank test gewechselt sind:

      Output

      USE test Ok. 0 rows in set. Elapsed: 0.001 sec.

      Im Rest dieses Leitfadens wird davon ausgegangen, dass Sie Anweisungen im Kontext dieser Datenbank ausführen.

      Erstellen Sie Ihre Tabelle visits, indem Sie den folgenden Befehl ausführen:

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

      Hier ist eine Aufstellung dessen, was der Befehl tut. Sie erstellen eine Tabelle namens visits, die vier Spalten aufweist:

      • id: Die Primärschlüsselspalte. Ähnlich wie bei anderen RDBMS-Systemen identifiziert eine Primärschlüsselspalte in ClickHouse eine Zeile eindeutig; jede Zeile muss einen eindeutigen Wert für diese Spalte aufweisen.

      • duration: Eine Gleitkommaspalte zur Speicherung der Dauer einzelner Besuche (in Sekunden). float-Spalten können Dezimalwerte wie 12,50 speichern.

      • url: Eine Zeichnfolgenspalte, die die besuchte URL speichert, wie z.B. http://example.com.

      • created: Eine Datums- und Uhrzeitspalte, die vefolgt, wann der Besuch stattgefunden hat.

      Nach den Spaltendefinitionen geben Sie MergeTree als Speicher-Engine für die Tabelle an. Die MergeTree-Familie von Engines wird aufgrund ihrer optimierten Unterstützung für große echtzeitbasierte Einfügungen, die allgemeine Stabilität sowie Unterstützung von Abfragen für Datenbanken empfohlen. Außerdem unterstützen MergeTree-Engines eine Sortierung von Zeilen nach Primärschlüssel, Partitionierung von Zeilen sowie Replikation und Abfrage von Daten.

      Wenn Sie ClickHouse zur Archivierung von Daten, die nicht oft abgefragt werden, oder zur Speicherung von temporären Daten verwenden möchten, können Sie die Log-Familie von Engines verwenden, um eine Optimierung für diesen Anwendungsfall vorzunehmen.

      Nach den Spaltendefinitionen definieren Sie andere Optionen auf der Tabellenebene. Die Klausel PRIMARY KEY legt id als Primärschlüsselspalte fest; die Klausel ORDER BY speichert anhand der Spalte id sortierte Werte. Ein Primärschlüssel identifiziert eine Zeile eindeutig und dient zum effizienten Zugreifen auf eine einzelne Zeile und ein effizientes Zuordnen von Zeilen.

      Bei Ausführung der Anweisung create sehen Sie folgende Ausgabe:

      Output

      CREATE 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.

      In diesem Abschnitt haben Sie eine Datenbank und eine Tabelle erstellt, um Daten zu Websitebesuchen zu verfolgen. Im nächsten Schritt fügen Sie Daten in die Tabelle ein, aktualisieren vorhandene Daten und löschen diese Daten.

      Schritt 4 — Einfügen, Aktualisieren und Löschen von Daten und Spalten

      In diesem Schritt verwenden Sie Ihre Tabelle namens visits, um Daten einzufügen, zu aktualisieren und zu löschen. Folgender Befehl ist ein Beispiel für die Syntax zur Eingabe von Zeilen in eine ClickHouse-Tabelle:

      INSERT INTO table_name VALUES (column_1_value, column_2_value, ....);
      

      Fügen Sie nun einige Zeilen von Beispieldaten zu Websitebesuchen in Ihre Tabelle visits ein, indem Sie nacheinander die folgenden Anweisungen ausführen:

      • INSERT INTO visits VALUES (1, 10.5, 'http://example.com', '2019-01-01 00:01:01');
      • INSERT INTO visits VALUES (2, 40.2, 'http://example1.com', '2019-01-03 10:01:01');
      • INSERT INTO visits VALUES (3, 13, 'http://example2.com', '2019-01-03 12:01:01');
      • INSERT INTO visits VALUES (4, 2, 'http://example3.com', '2019-01-04 02:01:01');

      Sie sehen die folgende Ausgabe, die für jede Einfügeanweisung wiederholt wird.

      Output

      INSERT INTO visits VALUES Ok. 1 rows in set. Elapsed: 0.004 sec.

      Die Ausgabe für die einzelnen Zeilen zeigt, dass Sie sie erfolgreich in die Tabelle visits eingefügt haben.

      Nun fügen Sie der Tabelle visits eine zusätzliche Spalte hinzu. Wenn Sie Spalten von bestehenden Tabellen hinzufügen oder löschen, unterstützt ClickHouse die Syntax ALTER.

      Die grundlegende Syntax für das Hinzufügen einer Spalte zu einer Tabelle lautet beispielsweise:

      ALTER TABLE table_name ADD COLUMN column_name column_type;
      

      Fügen Sie eine Spalte namens location hinzu, in der der Speicherort der Besuche auf einer Website gespeichert wird. Führen Sie dazu folgende Anweisung aus:

      • ALTER TABLE visits ADD COLUMN location String;

      Sie werden eine Ausgabe sehen, die der folgenden ähnelt:

      Output

      ALTER TABLE visits ADD COLUMN location String Ok. 0 rows in set. Elapsed: 0.014 sec.

      Die Ausgabe zeigt, dass Sie die Spalte location erfolgreich hinzugefügt haben.

      Ab Version 19.13.3 unterstützt ClickHouse aufgrund von Implementierungsbeschränkungen nicht mehr das Aktualisieren und Löschen einzelner Datenzeilen. ClickHouse unterstützt jedoch Massenaktualisierungen und -löschvorgänge und bietet eine eigene SQL-Syntax für diese Operationen, um ihre nicht standardmäßige Nutzung hervorzuheben.

      Die folgende Syntax ist ein Beispiel für eine Massenaktualisierung von Zeilen:

      ALTER TABLE table_name UPDATE  column_1 = value_1, column_2 = value_2 ...  WHERE  filter_conditions;
      

      Sie führen die folgende Anweisung aus, um die Spalte url aller Zeilen zu aktualisieren, die eine duration (Dauer) von weniger als 15 aufweisen. Geben Sie sie zur Ausführung in die Datenbankaufforderung ein:

      • ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15;

      Die Ausgabe der Anweisung zur Massenaktualisierung wird wie folgt aussehen:

      Output

      ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15 Ok. 0 rows in set. Elapsed: 0.003 sec.

      Die Ausgabe zeigt, dass Ihre Aktualisierungsanfrage erfolgreich abgeschlossen wurde. 0 rows in set in der Ausgabe weist darauf hin, dass die Abfrage keine Zeilen zurückgegeben hat; dies wird bei allen Aktualisierungs- und Löschabfragen der Fall sein.

      Die Beispielsyntax für das Massenlöschen von Zeilen ähnelt der Aktualisierung von Zeilen und weist die folgende Struktur auf:

      ALTER TABLE table_name DELETE WHERE filter_conditions;
      

      Um das Löschen von Daten zu testen, führen Sie folgende Anweisung aus, um alle Zeilen zu entfernen, die eine duration (Dauer) von weniger als 5 haben:

      • ALTER TABLE visits DELETE WHERE duration < 5;

      Die Ausgabe der Anweisung zur Massenlöschung wird in etwa folgendermaßen aussehen:

      Output

      ALTER TABLE visits DELETE WHERE duration < 5 Ok. 0 rows in set. Elapsed: 0.003 sec.

      Die Ausgabe bestätigt, dass Sie die Zeilen mit einer Dauer von weniger als fünf Sekunden gelöscht haben.

      Um Spalten aus Ihrer Tabelle zu löschen, würde die Syntax dieser Beispielstruktur folgen:

      ALTER TABLE table_name DROP COLUMN column_name;
      

      Löschen Sie die zuvor hinzugefügte Spalte location durch Ausführung von Folgendem:

      • ALTER TABLE visits DROP COLUMN location;

      Die Ausgabe von DROP COLUMN, die bestätigt, dass die Spalte gelöscht wurde, sieht wie folgt aus:

      Output

      ALTER TABLE visits DROP COLUMN location String Ok. 0 rows in set. Elapsed: 0.010 sec.

      Nachdem Sie Zeilen und Spalten in Ihrer Tabelle visits erfolgreich eingefügt, aktualisiert und gelöscht haben, fahren Sie nun im nächsten Schritt mit der Abfrage von Daten fort.

      Schritt 5 — Abfragen von Daten

      Die Abfragesprache von ClickHouse ist ein benutzerdefinierter SQL-Dialekt mit Erweiterungen und Funktionen, die für Analytics-Workloads geeignet sind. In diesem Schritt führen Sie Auswahl- und Aggregationsanfragen zum Abrufen von Daten und Ergebnissen aus Ihrer Tabelle namens visits aus.

      Auswahlabfragen ermöglichen es Ihnen, Zeilen und Spalten mit Daten, die nach den von Ihnen angegebenen Bedingungen gefiltert werden, zusammen mit Optionen wie Anzahl der zurückzugebenden Zeilen abzurufen. Mit der Syntax SELECT können Sie Zeilen und Spalten mit Daten auswählen. Die grundlegende Syntax für SELECT-Abfragen lautet:

      SELECT func_1(column_1), func_2(column_2) FROM table_name WHERE filter_conditions row_options;
      

      Führen Sie die folgende Anweisung aus, um url– und duration-Werte für Zeilen abzurufen, bei denen die URL http://example.com lautet.

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

      Sie sehen den folgenden Output:

      Output

      SELECT url, duration FROM visits 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.

      Die Ausgabe hat zwei Zeilen zurückgegeben, die den von Ihnen angegebenen Bedingungen entsprechen. Nachdem Sie Werte ausgewählt haben, können Sie nun mit der Ausführung von Aggregationsabfragen fortfahren.

      Aggregationsabfragen stellen Abfragen dar, die auf einen Satz von Werten angewendet werden und einzelne Ausgabewerte zurückgeben. In Analysedatenbanken werden diese Abfragen häufig ausgeführt und von der Datenbank umfassend optimiert. Zu den Aggregatfunktionen, die von ClickHouse unterstützt werden, gehören:

      • count: gibt die Zahl der Zeilen zurück, die den angegebenen Bedingungen entsprechen.

      • sum: gibt die Summe der ausgewählten Spaltenwerte zurück.

      • avg: gibt den Durchschnitt der ausgewählten Spaltenwerte zurück.

      Zu ClickHouse-spezifischen Aggregatfunktionen gehören:

      • uniq: gibt eine ungefähre Zahl eindeutiger Zeilen zurück, die abgeglichen wurden.

      • topK: gibt mit einem Approximationsalgorithmus ein Array der häufigsten Werte einer bestimmten Spalte zurück.

      Um die Ausführung von Aggregationsabfragen zu testen, berechnen Sie die Gesamtdauer von Besuchen durch Ausführung der Abfrage sum:

      • SELECT SUM(duration) FROM visits;

      Sie werden eine Ausgabe ähnlich der Folgenden sehen:

      Output

      SELECT SUM(duration) FROM visits ┌─SUM(duration)─┐ │ 63.7 │ └───────────────┘ 1 rows in set. Elapsed: 0.010 sec.

      Berechnen Sie nun die führenden zwei URLs durch Ausführung von:

      • SELECT topK(2)(url) FROM visits;

      Sie werden eine Ausgabe ähnlich der Folgenden sehen:

      Output

      SELECT topK(2)(url) FROM visits ┌─topK(2)(url)──────────────────────────────────┐ │ ['http://example2.com','http://example1.com'] │ └───────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.010 sec.

      Nachdem Sie Ihre Tabelle visits erfolgreich abgefragt haben, löschen Sie nun im nächsten Schritt Tabellen und Datenbanken.

      Schritt 6 — Löschen von Tabellen und Datenbanken

      In diesem Abschnitt löschen Sie die Tabelle visits sowie die Datenbank test.

      Die Syntax zur Löschung von Tabellen folgt diesem Beispiel:

      DROP TABLE table_name;
      

      Um die Tabelle visits zu löschen, führen Sie folgende Anweisung aus:

      Die folgende Ausgabe zeigt an, dass die Tabelle erfolgreich gelöscht wurde:

      output

      DROP TABLE visits Ok. 0 rows in set. Elapsed: 0.005 sec.

      Mit der Syntax DROP database table_name können Sie Datenbanken löschen. Um die Datenbank namens test zu löschen, führen Sie folgende Anweisung aus:

      Die resultierende Ausgabe zeigt, dass die Datenbank erfolgreich gelöscht wurde.

      Output

      DROP DATABASE test Ok. 0 rows in set. Elapsed: 0.003 sec.

      In diesem Schritt haben Sie Tabellen und Datenbanken gelöscht. Nachdem Sie Datenbanken, Tabellen und Daten in Ihrer ClickHouse-Instanz erstellt, aktualisiert und gelöscht haben, aktivieren Sie nun im nächsten Abschnitt den Remotezugriff auf Ihren Datenbankserver.

      Schritt 7 — Einrichten von Firewall-Regeln (optional)

      Wenn Sie ClickHouse nur lokal verwenden möchten (mit auf dem gleichen Server ausgeführten Anwendungen) oder auf Ihrem Server keine Firewall aktiviert haben, müssen Sie diesen Abschnitt nicht beachten. Wenn Sie hingegen eine Remoteverbindung mit dem ClickHouse-Datenbankserver herstellen möchten, sollten Sie diesen Schritt durchführen.

      Auf Ihrem Server ist derzeit eine Firewall aktiviert, die es Ihrer öffentlichen IP-Adresse verbietet, auf alle Ports zuzugreifen. Führen Sie die folgenden beiden Schritte durch, um Remotezugriff zu aktivieren:

      • Ändern Sie die Konfiguration von ClickHouse und erlauben Sie es der Software, alle Schnittstellen abzuhören.

      • Fügen Sie eine Firewall-Regel hinzu, die eingehende Verbindungen zu Port 8123 zulässt. Dabei handelt es sich um den HTTP-Port, an dem der ClickHouse-Server ausgeführt wird.

      Wenn Sie sich in der Datenbankaufforderung befinden, beenden Sie sie durch Eingabe von Strg+D.

      Bearbeiten Sie die Konfigurationsdatei, indem Sie Folgendes ausführen:

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

      Heben Sie dann die Auskommentierung der Zeile mit <!-- <listen_host>0.0.0.0</listen_host> --> auf, wie in der folgenden Datei dargestellt:

      /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: -->
          <listen_host>0.0.0.0</listen_host>
      
          <!-- Default values - try listen localhost on ipv4 and ipv6: -->
          <!--
          <listen_host>::1</listen_host>
          <listen_host>127.0.0.1</listen_host>
          -->
      ...
      

      Speichern Sie die Datei und schließen Sie sie. Starten Sie zum Anwenden der neuen Konfiguration den Dienst neu, indem Sie Folgendes ausführen:

      • sudo service clickhouse-server restart

      Bei diesem Befehl werden Sie keine Ausgabe sehen. Der ClickHouse-Server lauscht an Port 8123 nach HTTP-Verbindungen und an Port 9000 nach Verbindungen von clickhouse-client. Aktivieren Sie mit dem folgenden Befehl Zugriff an beiden Ports für die IP-Adresse Ihres zweiten Servers:

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

      Für beide Befehle wird die folgende Ausgabe angezeigt, die bestätigt, dass Sie den Zugriff auf beide Ports aktiviert haben:

      Output

      Rule added

      ClickHouse wird nun über die von Ihnen hinzugefügte IP-Adresse zugänglich sein. Fügen Sie bei Bedarf zusätzliche IP-Adressen hinzu, z. B. die Adresse Ihres lokalen Rechners.

      Um zu überprüfen, ob Sie sich über den Remotecomputer mit dem ClickHouse-Server verbinden können, führen Sie zunächst die Schritte in Schritt 1 dieses Tutorials auf dem zweiten Server aus und stellen Sie sicher, dass Sie den clickhouse-client installiert haben.

      Nachdem Sie sich beim zweiten Server angemeldet haben, starten Sie nun eine Client-Sitzung, indem Sie Folgendes ausführen:

      • clickhouse-client --host your_server_ip --password

      Ihnen wird die folgende Ausgabe angezeigt, die bestätigt, dass Sie erfolgreich eine Verbindung zum Server hergestellt haben:

      Output

      ClickHouse client version 19.13.3.26 (official build). Password for user (default): Connecting to your_server_ip:9000 as user default. Connected to ClickHouse server version 19.13.3 revision 54425. hostname :)

      In diesem Schritt haben Sie Remotezugriff auf Ihren ClickHouse-Datenbankserver aktiviert, indem Sie Ihre Firewall-Regeln angepasst haben.

      Zusammenfassung

      Sie haben auf Ihrem Server erfolgreich eine ClickHouse-Datenbank eingerichtet sowie eine Datenbank und Tabelle erstellt, Daten hinzugefügt, Abfragen ausgeführt und die Datenbank gelöscht. In der Dokumentation von ClickHouse können Sie mehr über die Benchmarks der Software im Vergleich zu anderen Open-Source- und kommerziellen Analysedatenbanken erfahren sowie allgemeine Referenzdokumente lesen.

      Zu weiteren Funktionen von ClickHouse gehört eine auf mehrere Server verteilte Abfrageverarbeitung, die für mehr Leistung und Schutz vor Datenverlusten sorgt, indem Daten in verschiedenen Shards gespeichert werden.



      Source link

      Comment installer et utiliser Clickhouse sur Debian 10


      L’auteur a choisi le Free and Open Source Fund pour recevoir une donation dans le cadre du programme Write for DOnations.

      Introduction

      ClickHouse est une base de données analytique open-source, orientée colonne, créée par Yandex pour les cas d’utilisation de données OLAP et de mégadonnées. Le support de ClickHouse pour le traitement des requêtes en temps réel le rend approprié aux applications qui nécessitent des résultats d’analyse en moins d’une seconde. Le langage de requêtes de ClickHouse est un dialecte de SQL qui offre de puissantes capacités de requête déclarative tout en offrant une familiarité et une courbe d’apprentissage plus courte à l’utilisateur final.

      Les bases de données orientées colonnes stockent les enregistrements en blocs groupés par colonnes au lieu de lignes. En ne chargement pas de données pour les colonnes absentes de la requête, les bases de données orientées colonnes passent moins de temps à lire des données tout en complétant les requêtes. Par conséquent, ces bases de données peuvent calculer et retourner des résultats beaucoup plus vite que les systèmes traditionnels basés sur les lignes pour certaines charges de travail (opérations de type OLAP, par exemple).

      Les systèmes de traitement analogique en ligne OnLine Analytics Processing (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 retourner rapidement les résultats des requêtes. De cette manière, l’OLAP est utile pour travailler dans des domaines tels que la science des données et les analyses d’entreprise.

      Dans ce tutoriel, vous allez installer le serveur de base de données et le client ClickHouse sur votre machine. Vous utiliserez le SGBD pour des tâches typiques et autoriserez éventuellement l’accès à distance depuis un autre serveur, afin de pouvoir vous connecter à la base de données depuis une autre machine. Ensuite, vous testerez ClickHouse en modélisant et en interrogeant des exemples de données de visites de sites web.

      Conditions préalables

      • Un Debian 10 avec un utilisateur non root avec sudo activé et une configuration de pare-feu. Vous pouvez suivre le tutoriel de configuration initiale du serveur pour créer l’utilisateur et configurer le pare-feu.
      • (Facultatif) Un Debian 10 secondaire, un utilisateur non root avec sudo activé et une configuration de pare-feu. Vous pouvez suivre le tutoriel de configuration initiale du serveur.

      Étape 1 – Installation de ClickHouse

      Dans cette section, vous allez installer le serveur et les programmes clients ClickHouse en utilisant apt.

      Tout d’abord, lancez SSH sur votre serveur en exécutant :

      dirmngr est un serveur de gestion de certificats et de clés. Il est requis pour l’ajout et la vérification des clés de dépôt à distance. Installez-le en l’exécutant :

      Yandex gère un référentiel APT qui dispopse 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 paquets ClickHouse validés :

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

      Vous verrez un résultat similaire à celui qui suit :

      Output

      Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4 gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <milovidov@yandex-team.ru>" imported gpg: Total number processed: 1 gpg: imported: 1

      La sortie confirme que la vérification et l’ajout de clé ont bien été effectués.

      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 extrait la sortie echo du sudo tee pour que cette sortie puisse être imprimée dans un fichier détenu par l’utilisateur root.

      Maintenant, exécutez apt update pour mettre à jour vos packages :

      Les packages clickhouse-server et clickhouse-client sont maintenant disponibles pour l’installation.

      Depuis la version 19.13.3 de ClickHouse, certaines configurations d’OpenSSL 1.1.1 telles que MinProtocol et CipherVersion ne sont pas lues correctement. Pour remédier à cette incompatibilité, modifiez le fichier de configuration OpenSSL et commentez la ligne ssl_conf = ssl_sect dans /etc/ssl/openssl.cnf.

      Modifiez le fichier de configuration en exécutant :

      • sudo nano /etc/ssl/openssl.cnf

      Ensuite, commentez la ligne contenant ssl_conf = ssl_sect, de sorte qu’elle ressemble au fichier suivant :

      /etc/ssl/openssl.cnf

      ...
      
      tsa_name        = yes   # Must the TSA name be included in the reply?
                      # (optional, default: no)
      ess_cert_id_chain   = no    # Must the ESS cert id chain be included?
                      # (optional, default: no)
      ess_cert_id_alg     = sha1  # algorithm to compute certificate
                      # identifier (optional, default: sha1)
      [default_conf]
      #ssl_conf = ssl_sect
      
      [ssl_sect]
      ...
      

      Maintenant que la configuration OpenSSL a été patchée, vous êtes prêt à installer les packages serveur et client de ClickHouse. Installez-les avec :

      • sudo apt install clickhouse-server clickhouse-client

      Lors de l’installation, il vous sera également demandé de définir un mot de passe pour l’utilisateur par défaut de ClickHouse.

      Vous avez installé avec succès le serveur et le client ClickHouse. 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 actions telles que le démarrage, l’arrêt et le redémarrage du serveur de base de données. systemd est un système init pour Linux qui permet d’initialiser et de gérer des services. Dans cette section, vous allez démarrer le service et vérifier qu’il fonctionne correctement.

      Lancez le service clickhouse-server en exécutant :

      • 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 à ce qui suit :

      Output

      ● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data) Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled) Active: active (running) 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 réussi à démarrer le serveur ClickHouse et vous pourrez maintenant 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 déclarations SQL directement dans l’invite de la base de données interactive. Les instructions consistent en des commandes qui suivent une syntaxe particulière et qui ordonnent au serveur de la base de données d’effectuer une opération demandée en même temps que les données requises. Vous créez des bases de données en utilisant la syntaxe CREATE DATABASE table_name. Pour créer une base de données, commencez une session client en exécutant la commande suivante :

      • clickhouse-client --password

      Il vous sera demandé d’entrer le mot de passe que vous avez défini pendant l’installation. Entrez-le pour démarrer correctement la session client.

      La commande précédente vous connectera à l’invite du client où vous pouvez exécuter des instructions SQL ClickHouse pour effectuer des actions telles que :

      • Créer, mettre à jour et supprimer des bases de données, des tables, des index, des partitions et des vues.

      • Exécuter des requêtes pour récupérer des données qui sont éventuellement filtrées et regroupées selon diverses conditions.

      Dans cette étape, avec le client ClickHouse prêt à l’insertion de données, vous allez créer une base de données et une table. Aux fins de ce tutoriel, vous allez créer une base de données nommée test, et à l’intérieur de celle-ci vous allez créer une table nommée <^>visits<^> qui effectue le suivi de la durée des visites sur le site web.

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

      Vous verrez la sortie suivante qui montre que vous avez créé la base de données :

      Output

      CREATE DATABASE test Ok. 0 rows in set. Elapsed: 0.003 sec.

      Une table ClickHouse est semblable aux tables d’autres bases de données relationnelles ; elle 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érentes sortes de requêtes sur des tables.

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

      CREATE TABLE table_name
      (
          column_name1 column_type [options],
          column_name2 column_type [options],
          ...
      ) ENGINE = engine
      

      Les valeurs table_name et column_name peuvent être n’importe quel identifiant ASCII valide. ClickHouse prend en charge un large éventail de types de colonnes, dont les plus courants sont :

      • UIntra64 : utilisé pour le stockage de valeurs entières dans la plage 0 à 1844674407709551615.

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

      • Ring : utilisé pour le stockage de caractères de longueur variable. Il ne nécessite pas d’attribut de longueur maximale puisqu’il peut stocker des longueurs arbitraires.

      • Date : utilisé pour le stockage des dates au format YYYY-MM-DD

      • DateTime : utilisé pour le stockage de dates couplées avec les heures et suit le format YYYY-MM-DD HH:MM:SS.

      Après les définitions de la colonne, vous spécifiez le moteur utilisé pour le tableau. Dans ClickHouse, les moteurs déterminent la structure physique des données sous-jacentes, les capacité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 à différentes exigences d’application. Le type de moteur le plus couramment utilisé et le plus applicable est MergeTree.

      Maintenant que vous avez un bon aperçu de la création de table, vous allez créer une table. Commencez par confirmer la base de données que vous allez modifier :

      Vous verrez la sortie suivante montrant que vous avez passé à la base de données test à partir de la base de données par défaut :

      Output

      USE test Ok. 0 rows in set. Elapsed: 0.001 sec.

      La suite de ce guide vous permettra d’exécuter des instructions dans le contexte de cette base de données.

      Créez votre table visits en exécutant cette commande :

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

      Voici une ventilation de ce que fait la commande. Vous créez un table nommé visits qui comporte quatre colonnes :

      • id : la colonne de la clé primaire. De même que les autres systèmes RDBMS, une colonne de clés primaire de ClickHouse identifie une ligne ; chaque ligne devrait avoir une valeur unique pour cette colonne.

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

      • url : colonne string qui stocke l’URL visite, comme http://example.com.

      • created : colonne date and time qui suit quand une visite a eu lieu.

      Après les définitions de colonne, vous spécifiez MergeTree comme moteur de stockage pour la table. La famille de moteurs 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 globale et de sa prise en charge des 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 avez l’intention d’utiliser ClickHouse pour archiver des données qui ne sont pas souvent interrogées ou pour stocker des données temporaires, vous pouvez utiliser la famille de moteurs Log pour une optimisation dans ce cas d’utilisation.

      Après avoir défini les colonnes, vous définirez d’autres options au niveau de la table. La clause PRIMARY KEY définit id comme la colonne clé primaire et la clause ORDER BY stockera les valeurs triées selon 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 colocaliser efficacement les lignes.

      Lorsque vous exécuterez l’instruction create, vous verrez la sortie suivante :

      Output

      CREATE 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 une table pour suivre les données de visite de site web. Dans l’étape suivante, vous allez insérer des données dans la table, mettre à jour les données existantes et supprimer ces données.

      Étape 4 — Insertion, mise à jour et suppression des données et des colonnes

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

      INSERT INTO table_name VALUES (column_1_value, column_2_value, ....);
      

      Maintenant, insérez quelques lignes d’exemple de données de visite de site web dans votre table visits en exécutant chacune des instructions suivantes :

      • INSERT INTO visits VALUES (1, 10.5, 'http://example.com', '2019-01-01 00:01:01');
      • INSERT INTO visits VALUES (2, 40.2, 'http://example1.com', '2019-01-03 10:01:01');
      • INSERT INTO visits VALUES (3, 13, 'http://example2.com', '2019-01-03 12:01:01');
      • INSERT INTO visits VALUES (4, 2, 'http://example3.com', '2019-01-04 02:01:01');

      Vous verrez la sortie suivante pour chaque instruction d’insertion.

      Output

      INSERT INTO visits VALUES Ok. 1 rows in set. Elapsed: 0.004 sec.

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

      Vous allez maintenant ajouter une colonne supplémentaire à la table visits. Lorsque vous ajoutez ou supprimez des colonnes de tables existantes, ClickHouse prend en charge la syntaxe ALTER.

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

      ALTER TABLE table_name ADD COLUMN column_name column_type;
      

      Ajoutez une colonne nommée location qui va enregistrer l’emplacement des visites d’un site web en exécutant l’instruction suivante :

      • ALTER TABLE visits ADD COLUMN location String;

      Vous verrez une sortie semblable à ce qui suit :

      Output

      ALTER TABLE visits ADD COLUMN location String Ok. 0 rows in set. Elapsed: 0.014 sec.

      La sortie montre que vous avez bien ajouté la colonne location.

      À partir de la version 19.13.3, ClickHouse ne permet pas de mettre à jour et de supprimer des lignes individuelles de données, en raison de contraintes de mise en œuvre. Toutefois, ClickHouse prend en charge les mises à jour et les suppressions en vrac 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 vrac des lignes :

      ALTER TABLE table_name UPDATE  column_1 = value_1, column_2 = value_2 ...  WHERE  filter_conditions;
      

      Vous allez exécuter l’instruction suivante pour mettre à jour la colonne url de toutes les lignes qui ont une durée inférieure à 15. Saisissez-la dans l’invite d’exécution de la base de données :

      • ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15;

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

      Output

      ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15 Ok. 0 rows in set. Elapsed: 0.003 sec.

      La sortie montre que votre requête de mise à jour a bien été effectuée. Le 0 rows in set dans la sortie indique que la requête n’a renvoyé aucune ligne ; ce sera le cas pour toute requête de mise à jour et de suppression.

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

      ALTER TABLE table_name DELETE WHERE filter_conditions;
      

      Pour tester la suppression de données, exécutez l’instruction suivante pour supprimer toutes les lignes qui ont une durée inférieure à 5 :

      • ALTER TABLE visits DELETE WHERE duration < 5;

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

      Output

      ALTER TABLE visits DELETE WHERE duration < 5 Ok. 0 rows in set. Elapsed: 0.003 sec.

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

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

      ALTER TABLE table_name DROP COLUMN column_name;
      

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

      • ALTER TABLE visits DROP COLUMN location;

      La sortie DROP COLUMN confirmant que vous avez supprimé la colonne sera la suivante :

      Output

      ALTER TABLE visits DROP COLUMN location String Ok. 0 rows in set. Elapsed: 0.010 sec.

      Maintenant que vous avez bien inséré, mis à jour et supprimé des lignes et des colonnes dans votre table visits, vous allez passer à l’interrogation de données dans la prochaine étape.

      Étape 5 – Interrogation de données

      Le langage de requête de ClickHouse est un dialecte SQL personnalisé 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 récupérer des données et des résultats de votre table visits.

      Les requêtes de sélection vous permettent de récupérer des lignes et des colonnes de données filtrées par des conditions que vous spécifiez, ainsi que des options telles que le nombre de lignes à retourner. 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 :

      SELECT func_1(column_1), func_2(column_2) FROM table_name WHERE filter_conditions row_options;
      

      Exécutez l’instruction suivante pour récupérer des valeurs url et de durée pour les lignes où l’url est http://example.com.

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

      Vous verrez le résultat suivant :

      Output

      SELECT url, duration FROM visits 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 qui correspondent aux conditions que vous avez spécifiées. Maintenant que vous avez sélectionné des valeurs, vous pouvez passer à l’exécution des 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 analytiques, ces requêtes sont fréquemment exécutées et sont bien optimisées par la base de données. Certaines fonctions agrégées prises en charge par ClickHouse sont :

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

      • sum : renvoie la somme des valeurs des colonnes sélectionnées.

      • avg : renvoie la moyenne des valeurs des colonnes sélectionnées.

      Certaines fonctions agrégées spécifiques à ClickHouse-specific comprennent :

      • uniq : renvoie un nombre approximatif de lignes distinctes assorties.

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

      Pour démontrer 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 SUM(duration) FROM visits;

      Vous verrez un résultat similaire à celui qui suit :

      Output

      SELECT SUM(duration) FROM visits ┌─SUM(duration)─┐ │ 63.7 │ └───────────────┘ 1 rows in set. Elapsed: 0.010 sec.

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

      • SELECT topK(2)(url) FROM visits;

      Vous verrez un résultat similaire à celui qui suit :

      Output

      SELECT 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é avec succès votre table visits, vous allez supprimer des tables et des bases de données lors de la prochaine étape.

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

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

      La syntaxe de suppression de table suit cet exemple :

      DROP TABLE table_name;
      

      Pour supprimer la table <^>visits<^>, exécutez l’instruction suivante :

      Vous verrez la sortie suivante déclarant que vous avez bien supprimé la table :

      output

      DROP TABLE visits Ok. 0 rows in set. Elapsed: 0.005 sec.

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

      La sortie obtenue montre que vous avez bien supprimé la base de données.

      Output

      DROP DATABASE test Ok. 0 rows in set. Elapsed: 0.003 sec.

      Vous avez supprimé des tables et des bases de données lors de 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 avez l’intention de n’utiliser ClickHouse que localement avec des applications fonctionnant sur le même serveur, ou si vous n’avez pas de pare-feu activé sur votre serveur, vous n’avez pas besoin de suivre cette section. Si, au contraire, vous vous connectez à distance au serveur de base de données ClickHouse, vous devez suivre cette étape.

      Actuellement, votre serveur est doté d’un pare-feu qui désactive l’accès de votre adresse IP publique à tous les ports. Vous allez exécuter les deux étapes suivantes pour autoriser l’accès à distance :

      • Modifiez la configuration de ClickHouse et autorisez-le à écouter 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 vous trouvez dans l’invite de la base de données, quittez-la en tapant CTRL+D.

      Modifiez le fichier de configuration en exécutant :

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

      Ensuite, décommentez la ligne contenant <!-- <listen_host>0.0.0</listen_host> -->, comme dans 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: -->
          <listen_host>0.0.0.0</listen_host>
      
          <!-- Default values - try listen localhost on ipv4 and ipv6: -->
          <!--
          <listen_host>::1</listen_host>
          <listen_host>127.0.0.1</listen_host>
          -->
      ...
      

      Sauvegardez le fichier et quittez. Pour que la nouvelle configuration soit appliquée, redémarrez le service en exécutant :

      • sudo service clickhouse-server restart

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

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

      Vous verrez la sortie suivante pour les deux commandes, qui montre que vous avez activé l’accès aux deux ports :

      Output

      Rule added

      ClickHouse sera maintenant accessible depuis l’IP que vous avez ajoutée. N’hésitez pas à ajouter des IP supplémentaires tels que l’adresse de votre machine locale, si nécessaire.

      Pour vérifier que vous pouvez vous connecter au serveur ClickHouse depuis la machine distante, suivez d’abord les étapes de l’Étape 1 de ce tutoriel sur le deuxième serveur et assurez-vous que le clickhouse-client y est installé.

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

      • clickhouse-client --host your_server_ip --password

      Vous verrez la sortie suivante qui montre que vous vous êtes bien connecté au serveur :

      Output

      ClickHouse client version 19.13.3.26 (official build). Password for user (default): Connecting to your_server_ip:9000 as user default. Connected to ClickHouse server version 19.13.3 revision 54425. hostname :)

      Dans 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 mis en place avec succès une instance de base de données ClickHouse sur votre serveur et vous avez 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 analyses comparatives par rapport à d’autres bases de données analytiques commerciales et open-source, ainsi que des documents de référence généraux.

      Les autres caractéristiques offertes par ClickHouse comprennent le traitement distribué des requêtes sur plusieurs serveurs pour améliorer les performances et protéger contre la perte de données en stockant les données sur différentes partitions.



      Source link

      Cómo instalar y usar ClickHouse en Debian 10


      El autor seleccionó la Free and Open Source Fund para recibir una donación como parte del programa Write for DOnations.

      Introducción

      ClickHouse es una base de datos de análisis de código abierto con orientación en columnas, creada por Yandex para casos de uso de OLAP y macrodatos. La compatibilidad de ClickHouse con procesamiento de consultas en tiempo real hace que sea adecuada para aplicaciones que requieren resultados analíticos en menos de un segundo. El lenguaje de consulta de ClickHouse es un dialecto de SQL que permite capacidades de consulta declarativas potentes, y ofrece familiaridad y una curva de aprendizaje más pequeña para el usuario final.

      Las bases de datos orientadas en columnas almacenan los registros en bloques agrupados por columnas en vez de filas. Al no cargar los datos para las columnas ausentes en consultas, las bases de datos orientadas en columnas pasan menos tiempo leyendo datos cuando completan consultas. Como resultado, estas bases de datos pueden calcular y mostrar resultados mucho más rápido que los sistemas tradicionales basados en filas para ciertas cargas de trabajo, como OLAP.

      Los sistemas de procesamiento analítico en línea (OLAP) permiten organizar grandes cantidades de datos y realizar consultas complejas. Son capaces de gestionar petabytes de datos y mostrar resultados de consultas rápidamente. De esta forma, el OLAP es útil para trabajar en áreas como la ciencia de datos y el análisis empresarial.

      A través de este tutorial, instalará el servidor y el cliente de la base de datos ClickHouse en su equipo. Usará DBMS para tareas típicas y, opcionalmente, para permitir el acceso remoto desde otro servidor para poder establecer conexión con la base de datos desde otro equipo. Luego, probará ClickHouse modelando y consultando datos de visitas a sitios web.

      Requisitos previos

      • Un servidor de Debian 10 con un usuario no root sudo y un firewall configurados. Puede seguir el tutorial de configuración inicial de servidores para crear el usuario y configurar el firewall.
      • (Opcional) Un usuario no root sudo de Debian 10 y un firewall configurados. Puede seguir el tutorial de configuración inicial para servidores.

      Paso 1: Instalar ClickHouse

      En esta sección, instalará el servidor de ClickHouse y programas clientes usando apt.

      Primero, aplique SSH a su servidor ejecutando lo siguiente:

      dirmngr es un servidor que permite administrar certificados y claves. Se necesita para añadir y verificar claves remotas de repositorios. Puede instalarlo ejecutando lo siguiente:

      Yandex cuenta con un respositorio de APT que tiene la última versión de ClickHouse. Añada la clave GPG del repositorio de modo que pueda descargar de forma segura paquetes de ClickHouse validados:

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

      El resultado debe ser similar a lo siguiente:

      Output

      Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4 gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <milovidov@yandex-team.ru>" imported gpg: Total number processed: 1 gpg: imported: 1

      El resultado confirma que verificó y añadió la clave correctamente.

      Añada el repositorio a su lista de repositorios de APT ejecutando lo siguiente:

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

      Aquí, canalizó el resultado de echo a sudo tee para que este resultado se pueda imprimir a un archivo perteneciente al root.

      Ahora, ejecute apt update para actualizar sus paquetes:

      Los paquetes clickhouse-server y clickhouse-client ahora estarán disponibles para instalarse.

      Hasta la versión 19.13.3 de ClickHouse, la lectura de ciertas configuraciones de OpenSSL 1.1.1 como MinProtocol y CipherVersion no es correcta. Para resolver esta incompatibilidad, modifique el archivo de configuración de OpenSSL y elimine la línea ssl_conf=ssl_sect en /etc/ssl/openssl.cnf.

      Edite el archivo de configuración ejecutando lo siguiente:

      • sudo nano /etc/ssl/openssl.cnf

      Luego elimine la línea que contiene ssl_conf=ssl_sect, de forma que tenga un aspecto similar al del siguiente archivo:

      /etc/ssl/openssl.cnf

      ...
      
      tsa_name        = yes   # Must the TSA name be included in the reply?
                      # (optional, default: no)
      ess_cert_id_chain   = no    # Must the ESS cert id chain be included?
                      # (optional, default: no)
      ess_cert_id_alg     = sha1  # algorithm to compute certificate
                      # identifier (optional, default: sha1)
      [default_conf]
      #ssl_conf = ssl_sect
      
      [ssl_sect]
      ...
      

      Ahora que se parcheó la configuración de OpenSSL, está listo para instalar el servidor de ClickHouse y los paquetes de clientes. Instálelos con:

      • sudo apt install clickhouse-server clickhouse-client

      Durante la instalación, se le solicitará configurar una contraseña para el usuario predeterminado de ClickHouse.

      Con esto, habrá instalado el servidor y el cliente de ClickHouse de forma correcta. Ahora estará listo para iniciar el servicio de la base de datos y asegurarse de que se ejecute correctamente.

      Paso 2: Iniciar el servicio

      El paquete clickhouse-server que instaló en la sección anterior crea un servicio systemd, que realiza acciones como iniciar, detener y reiniciar el servidor de la base de datos. systemd es un sistema init para Linux que permite inicializar y administrar servicios. En esta sección, iniciará el servicio y verificará que se ejecute correctamente.

      Inicie el servicio clickhouse-server ejecutando lo siguiente:

      • sudo service clickhouse-server start

      Con el comando anterior no se mostrará ningún resultado. Para verificar que el servicio esté funcionando correctamente, ejecute lo siguiente:

      • sudo service clickhouse-server status

      Visualizará un resultado similar al siguiente:

      Output

      ● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data) Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled) Active: active (running) 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

      En el resultado se indica que el servidor está en ejecución.

      Inició correctamente el servidor de ClickHouse y ahora podrá usar el programa CLI clickhouse-client para establecer conexión con el servidor.

      Paso 3: Crear bases de datos y tablas

      En ClickHouse, puede crear y eliminar bases de datos ejecutando instrucciones SQL directamente en el intérprete de comandos interactivo de la base de datos. Las instrucciones consisten en comandos que siguen una sintaxis concreta que indica al servidor de la base de datos que realice una operación solicitada junto con cualquier dato requerido. Las bases de datos se crean usando la sintaxis CREATE DATABASE table_name. Para crear una base de datos, primero inicie la sesión del cliente ejecutando el siguiente comando:

      • clickhouse-client --password

      Se le solicitará introducir la contraseña que configuró durante la instalación; ingrésela para iniciar correctamente la sesión del cliente.

      El comando previo hará que inicie sesión en el intérprete de comandos del cliente, en el que puede ejecutar las instrucciones SQL de ClickHouse para realizar acciones como la siguiente:

      • Crear, actualizar y eliminar bases de datos, tablas, índices, particiones y vistas.

      • Ejecutar consultas para obtener datos que se filtran y agrupan de forma opcional usando varias condiciones.

      En este paso, una vez que el cliente de ClickHouse esté listo para insertar datos, creará una base de datos y una tabla. A los efectos de este tutorial, creará una base de datos llamada test​​​, y dentro de ella una tabla llamada visits que realiza un seguimiento de las duraciones de las visitas al sitio web.​​​​

      Ahora que se encuentra en el intérprete de comandos de ClickHouse, cree su base de datos test​​​ ejecutando lo siguiente:

      Verá el siguiente resultado, en el que se muestra que creó la base de datos:

      Output

      CREATE DATABASE test Ok. 0 rows in set. Elapsed: 0.003 sec.

      Una tabla de ClickHouse es similar a las tablas de otras bases de datos relacionales; contiene un conjunto de datos relacionados en un formato estructurado. Puede especificar columnas junto con sus tipos, añadir filas de datos, y ejecutar diferentes tipos de consultas en tablas.

      La sintaxis para crear tablas en ClickHouse sigue esta estructura de ejemplo:

      CREATE TABLE table_name
      (
          column_name1 column_type [options],
          column_name2 column_type [options],
          ...
      ) ENGINE = engine
      

      Los valores table_name y column_name pueden ser cualquier identificador ASCII válido. ClickHouse es compatible con varios tipos de columna; algunos de los más populares son lo siguientes:

      • Ulnt64: se utiliza para almacenar valores enteros en el rango de 0 a 18446744073709551615.

      • Float64: se utiliza para almacenar números con punto flotante, como “2039.23”, “10.5”, etc.

      • String: se utiliza para almacenar caracteres de extensión variable. No requiere un atributo de longitud máxima, ya que puede almacenar extensiones arbitrarias.

      • Date: se utiliza para almacenar fechas con el formato YYYY-MM-DD.

      • DateTime: se utiliza para almacenar fechas junto con horas con el formato YYYY-MM-DD HH:MM:SS.

      Después de las deficiones de columna, se especifica el motor empleado para la tabla. En ClickHouse, los motores determinan la estructura física de los datos subyacentes, las capacidades de consulta de la tabla, sus modos de acceso simultáneo y la compatibilidad con los índices. Hay diferentes tipos de motores adecuados según los requisitos de las diferentes aplicaciones. El tipo de motor más usado y más aplicable es MergeTree.

      Ahora que vio una descripción general de la creación de tablas, confeccionará una. Comience confirmando la base de datos que modificará:

      Verá el siguiente resultado, en el que se muestra que se posicionó en la base de datos test desde la base de datos default:

      Output

      USE test Ok. 0 rows in set. Elapsed: 0.001 sec.

      Para el resto de esta guía, se supondrá que ejecutará las instrucciones en el contexto de esta base de datos.

      Cree su tabla visits ejecutando este comando:

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

      A continuación, verá un desglose de lo que hace el comando. Se crea una tabla llamada test que tiene cuatro columnas:

      • id: columna de clave principal. De forma similar a otros sistemas RDBMS, en una columna de clave principal de ClickHouse se identifica de forma única una fila; cada fila debería tener un valor único para esta columna.

      • duration: columna flotante que se utiliza para almacenar la duración de cada visita en segundos. Las columnas float pueden almacenar valores decimales, como “12.50”.

      • url: columna de cadena que almacena la URL visitada, como http://example.com.

      • created: una columna de fecha y hora que realiza un seguimiento del momento en que se produjo la visita.

      Tras las definiciones de columna, se especifica MergeTree como el motor de almacenamiento para la tabla. La familia MergeTree de motores se recomienda para bases de datos de producción debido a su compatibilidad optimizada con inserciones grandes en tiempo real, su solidez general y su compatibilidad con consultas. Adicionalmente, los motores MergeTree admiten el ordenamiento de filas por clave principal, la partición de filas, y la replicación y el muestro de datos.

      Si desea usar ClickHouse para archivar datos que no se consultan a menudo o almacenar datos temporales, puede usar la familia Log de motores para la optimización según el uso.

      Después de las definiciones de columna, definirá otras opciones de nivel de tabla. La cláusula PRIMARY KEY establece id como la columna clave principal y la cláusula ORDER BY almacenará los valores ordenados por la columna id. Una clave principal identifica de forma única una fila y se utiliza para acceder a una única fila y disponer filas de manera eficiente.

      Cuando ejecute la instrucción “create”, verá el siguiente resultado:

      Output

      CREATE 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.

      En esta sección, creó una base de datos y una tabla para realizar un seguimiento de los datos de visitas de un sitio web. En el siguiente paso, insertará datos en la tabla, actualizará los existentes y los eliminará.

      Paso 4: Insertar, actualizar y eliminar datos y columnas

      En este paso, usará su tabla visits para insertar, actualizar y eliminar datos. El siguiente comando es un ejemplo de la sintaxis para insertar filas en una tabla de ClickHouse:

      INSERT INTO table_name VALUES (column_1_value, column_2_value, ....);
      

      Ahora, inserte algunas filas de datos sobre visitas al sitio web de ejemplo en su tabla visits ejecutando cada una de las siguientes instrucciones:

      • INSERT INTO visits VALUES (1, 10.5, 'http://example.com', '2019-01-01 00:01:01');
      • INSERT INTO visits VALUES (2, 40.2, 'http://example1.com', '2019-01-03 10:01:01');
      • INSERT INTO visits VALUES (3, 13, 'http://example2.com', '2019-01-03 12:01:01');
      • INSERT INTO visits VALUES (4, 2, 'http://example3.com', '2019-01-04 02:01:01');

      Verá el siguiente resultado repetido para cada instrucción de inserción.

      Output

      INSERT INTO visits VALUES Ok. 1 rows in set. Elapsed: 0.004 sec.

      El resultado de cada fila muestra que la insertó correctamente en la tabla visits.

      Ahora añadirá una columna a la tabla visits. Cuando se añaden o eliminan columnas en las tablas existentes, ClickHouse admite la sintaxis ALTER.

      Por ejemplo, la sintaxis básica para añadir una columna a una tabla es la siguiente:

      ALTER TABLE table_name ADD COLUMN column_name column_type;
      

      Añada una columna llamada location en la que se almacenará la ubicación de las visitas a un sitio web ejecutando la siguiente instrucción:

      • ALTER TABLE visits ADD COLUMN location String;

      Visualizará un resultado similar al siguiente:

      Output

      ALTER TABLE visits ADD COLUMN location String Ok. 0 rows in set. Elapsed: 0.014 sec.

      En el resultado se muestra que ha añadió la columna location correctamente.

      Hasta la versión 19.13.3, ClickHouse no es compatible con la actualización y eliminación de filas individuales de datos debido a restricciones de implementación. ClickHouse admite actualizaciones y eliminaciones masivas. Sin embargo, tiene una sintaxis SQL distinta para estas operaciones a fin de resaltar su uso no estándar.

      La siguiente sintaxis es un ejemplo para actualizar filas de forma masiva:

      ALTER TABLE table_name UPDATE  column_1 = value_1, column_2 = value_2 ...  WHERE  filter_conditions;
      

      Ejecutará la siguiente instrucción para actualizar la columna url de todas las filas que tengan una duration inferior a 15. Introdúzcala en la indicación de la base de datos para ejecutarla:

      • ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15;

      El resultado de la instrucción de actualización masiva será el siguiente:

      Output

      ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15 Ok. 0 rows in set. Elapsed: 0.003 sec.

      En el resultado, se muestra que su consulta de actualización se completó de forma correcta. En la línea 0 rows in set se indica que con la consulta no se obtuvieron filas; este sería el caso para cualquier consulta de actualización y eliminación.

      El efecto de la sintaxis de ejemplo para eliminar filas de forma masiva es similar al de actualizar las filas y tiene la siguiente estructura:

      ALTER TABLE table_name DELETE WHERE filter_conditions;
      

      Para probar la eliminación de datos, ejecute la siguiente instrucción para eliminar todas las filas que tengan una duration inferior a 5:

      • ALTER TABLE visits DELETE WHERE duration < 5;

      El resultado de la instrucción de eliminación en lote será similar al siguiente:

      Output

      ALTER TABLE visits DELETE WHERE duration < 5 Ok. 0 rows in set. Elapsed: 0.003 sec.

      El resultado confirma que ha eliminó las filas con una duración de menos de cinco segundos.

      Para eliminar columnas de su tabla, la sintaxis debería asemejarse a la de esta estructura de ejemplo:

      ALTER TABLE table_name DROP COLUMN column_name;
      

      Elimine la columna location que añadió previamente ejecutando lo siguiente:

      • ALTER TABLE visits DROP COLUMN location;

      El resultado de DROP COLUMN que confirma que eliminó la columna será el siguiente:

      Output

      ALTER TABLE visits DROP COLUMN location String Ok. 0 rows in set. Elapsed: 0.010 sec.

      Ahora que insertó, actualizó y eliminó correctamente filas y columnas en su tabla visits, en el siguiente paso solicitará datos.

      Paso 5: Consultar datos

      El lenguaje de consulta de ClickHouse es un dialecto personalizado de SQL con extensiones y funciones adecuadas para cargas de trabajo analíticas. En este paso, ejecutará consultas de selección y adición para obtener datos y resultados de su tabla visits.

      Las consultas de selección le permiten obtener filas y columnas de datos filtrados por condiciones que especifique, con opciones como el número de filas que se mostrarán. Puede seleccionar filas y columnas de datos usando la sintaxis SELECT. La sintaxis básica de las consultas SELECT es la siguiente:

      SELECT func_1(column_1), func_2(column_2) FROM table_name WHERE filter_conditions row_options;
      

      Ejecute la siguiente instrucción para obtener los valores url y duration para las filas en las cuales la url sea http://example.com.

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

      Verá lo siguiente:

      Output

      SELECT url, duration FROM visits 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.

      En el resultado se muestran dos filas que coinciden con las condiciones que especificó. Ahora que seleccionó los valores, puede proceder a ejecutar consultas de adición.

      Las consultas de adición se aplican a un conjunto de valores y muestran valores de resultados sencillos. En las bases de datos de analíticas, estas consultas se ejecutan frecuentemente y se optimizan bien a través de la base de datos. Las siguientes son algunas funciones de adición compatibles con ClickHouse:

      • count: muestra el recuento de filas que coinciden con las condiciones especificadas.

      • sum: muestra la suma de los valores de columnas seleccionadas.

      • avg: muestra el promedio de valores seleccionados en columnas.

      Las siguientes son algunas funciones de adición específicas de ClickHouse:

      • uniq: muestra un número aproximado de filas distintas que coinciden.

      • topK: devuelve una matriz de los valores más frecuentes de una columna especifica usando un algoritmo de aproximación.

      Para demostrar la ejecución de las consultas de adición, calculará la duración total de las visitas usando la consulta sum:

      • SELECT SUM(duration) FROM visits;

      El resultado debe ser similar a lo siguiente:

      Output

      SELECT SUM(duration) FROM visits ┌─SUM(duration)─┐ │ 63.7 │ └───────────────┘ 1 rows in set. Elapsed: 0.010 sec.

      Ahora, calcule las dos URL principales ejecutando lo siguiente:

      • SELECT topK(2)(url) FROM visits;

      El resultado debe ser similar a lo siguiente:

      Output

      SELECT topK(2)(url) FROM visits ┌─topK(2)(url)──────────────────────────────────┐ │ ['http://example2.com','http://example1.com'] │ └───────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.010 sec.

      Ahora que consultó correctamente su tabla visits, en el siguiente paso eliminará tablas y bases de datos.

      Paso 6: Eliminar tablas y bases de datos

      En esta sección, eliminará su tabla visits y la base de datos test.

      La sintaxis para eliminar tablas sigue este ejemplo:

      DROP TABLE table_name;
      

      Para eliminar la tabla visits, ejecute la siguiente instrucción:

      Verá el siguiente resultado, que indicará que eliminó la tabla correctamente:

      output

      DROP TABLE visits Ok. 0 rows in set. Elapsed: 0.005 sec.

      Puede eliminar bases de datos usando la sintaxis DROP database table_name​​​. Para eliminar la base de datos test, ejecute la siguiente instrucción:

      En el resultado se muestra que eliminó la base de datos correctamente.

      Output

      DROP DATABASE test Ok. 0 rows in set. Elapsed: 0.003 sec.

      En este paso, eliminó tablas y bases de datos. Ahora que creó, actualizó y eliminó bases de datos, tablas y datos en su instancia de ClickHouse, en la siguiente sección permitirá el acceso remoto al servidor de su base de datos.

      Paso 7: Configurar las reglas del firewall (opcional)

      Si desea usar ClickHouse solo a nivel local con aplicaciones que se ejecuten en el mismo servidor, o si no dispone de un firewall habilitado en su servidor, no necesitará completar esta sección. Si, por el contrario, planea establecer conexión con el servidor de la base de datos de ClickHouse de forma remota, debería seguir este paso.

      Actualmente, su servidor cuenta con un firewall habilitado que impide que su dirección IP pública acceda a todos los puertos. Completará los siguientes dos pasos para permitir el acceso remoto:

      • Modifique la configuración de ClickHouse y permita que escuche en todas las interfaces.

      • Añada una regla de firewall que permita las conexiones entrantes al puerto 8123, el puerto HTTP que el servidor de ClickHouse ejecuta.

      Si se encuentra en el intérprete de comandos de la base de datos, ciérrelo con CTRL+D.

      Edite el archivo de configuración ejecutando lo siguiente:

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

      Luego, elimine el comentario de la línea que contiene <!-- <listen_host>0.0.0.0</listen_host> -->​​​​​​, como en el siguiente archivo:

      /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: -->
          <listen_host>0.0.0.0</listen_host>
      
          <!-- Default values - try listen localhost on ipv4 and ipv6: -->
          <!--
          <listen_host>::1</listen_host>
          <listen_host>127.0.0.1</listen_host>
          -->
      ...
      

      Guarde el archivo y cierre el intérprete. Para que se aplique la nueva configuración, reinicie el servicio ejecutando lo siguiente:

      • sudo service clickhouse-server restart

      Este comando no generará resultados. El servidor de ClickHouse escucha conexiones HTTP en el puerto 8123 y conexiones desde clickhouse-client en el puerto 9000. Permita el acceso a ambos puertos para la segunda dirección IP de su servidor con el siguiente comando:

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

      Para ambos comandos, verá el siguiente resultado en el que se muestra que habilitó el acceso a ambos puertos:

      Output

      Rule added

      El acceso a ClickHouse ahora será posible desde la dirección IP que añadió. Puede añadir direcciones IP adicionales, como la de su equipo local, si es necesario.

      Para verificar que puede establecer conexión con el servidor de ClickHouse desde el equipo remoto, sigas la indicaciones del paso 1 de este tutorial para el segundo servidor y asegúrese de que el clickhouse-client esté instalado en él.

      Ahora que inició sesión en el segundo servidor, inicie una sesión de cliente ejecutando lo siguiente:

      • clickhouse-client --host your_server_ip --password

      Verá el siguiente resultado, que muestra que estableció conexión de forma correcta con el servidor:

      Output

      ClickHouse client version 19.13.3.26 (official build). Password for user (default): Connecting to your_server_ip:9000 as user default. Connected to ClickHouse server version 19.13.3 revision 54425. hostname :)

      En este paso, habilitó el acceso remoto al servidor de su base de datos de ClickHouse ajustando las reglas de su firewall.

      Conclusión

      Configuró correctamente una instancia de base de datos de ClickHouse en su servidor y creó una base de datos y una tabla, añadió datos, realizó consultas y eliminó la base de datos. En la documentación de ClickHouse, puede obtener información sobre referencias de la empresa en comparación con otras bases de datos de análisis de código abierto y comerciales, y hallar documentos de referencia general.

      ClickHouse ofrece otras funciones, como la de procesamiento distribuido de consultas en varios servidores, para mejorar el rendimiento y brindar protección contra la pérdida de datos mediante el almacenamiento de estos en diferentes fragmentos.



      Source link