Ce tutoriel explique comment écrire des données de manière aléatoire dans les tables locales de chaque nœud d’un cluster ClickHouse.
Prérequis
Un cluster ClickHouse est requis. Pour plus d’informations, consultez la rubrique Créer un cluster ClickHouse.
Procédure
Connectez-vous au cluster ClickHouse via SSH. Pour plus d’informations, consultez la rubrique Se connecter à un cluster.
-
Exécutez la commande suivante pour télécharger l’exemple de jeu de données officiel :
curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv -
Exécutez la commande suivante pour démarrer le client ClickHouse :
clickhouse-client -h core-1-1 -mRemarqueCet exemple se connecte au nœud
core-1-1. Si vous disposez de plusieurs nœuds principaux, connectez-vous à l’un d’entre eux. -
Exécutez la commande suivante pour créer une base de données :
Utilisez le paramètre
ON CLUSTERpour créer la base de données sur tous les nœuds du cluster. L’identifiant de cluster par défaut estcluster_emr.CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr;La commande renvoie la sortie suivante :
core-1-1.c-2ecd13e05xxx cn-hangzhou.emr.aliyuncs.com :) CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr; CREATE DATABASE IF NOT EXISTS demo ON CLUSTER cluster_emr Query id: ecf856dc-3490-498a-8368-386f38dcxxx ┌─host──────────────────────────────────────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐ │ core-1-1.c-2ecd13e05xxx.cn-hangzhou.emr.aliyuncs.com │ 9000 │ 0 │ │ 0 │ 0 │ └───────────────────────────────────────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘ 1 rows in set. Elapsed: 0.123 sec.core-1-1.c-2ecd13e05xxx cn-hangzhou.emr.aliyuncs.com :) CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr; CREATE DATABASE IF NOT EXISTS demo ON CLUSTER cluster_emr Query id: ecf856dc-3490-498a-8368-386f38dcxxx ┌─host──────────────────────────────────────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐ │ core-1-1.c-2ecd13e05xxx.cn-hangzhou.emr.aliyuncs.com │ 9000 │ 0 │ │ 0 │ 0 │ └───────────────────────────────────────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘ 1 rows in set. Elapsed: 0.123 sec.
Exécutez la commande suivante pour créer une table répliquée sur tous les nœuds du cluster :
Une table répliquée crée plusieurs réplicas de données selon votre configuration, ce qui garantit la redondance des données et la cohérence à terme.
CREATE TABLE demo.hits_local ON CLUSTER cluster_emr
(
`WatchID` UInt64,
`JavaEnable` UInt8,
`Title` String,
`GoodEvent` Int16,
`EventTime` DateTime,
`EventDate` Date,
`CounterID` UInt32,
`ClientIP` UInt32,
`ClientIP6` FixedString(16),
`RegionID` UInt32,
`UserID` UInt64,
`CounterClass` Int8,
`OS` UInt8,
`UserAgent` UInt8,
`URL` String,
`Referer` String,
`URLDomain` String,
`RefererDomain` String,
`Refresh` UInt8,
`IsRobot` UInt8,
`RefererCategories` Array(UInt16),
`URLCategories` Array(UInt16),
`URLRegions` Array(UInt32),
`RefererRegions` Array(UInt32),
`ResolutionWidth` UInt16,
`ResolutionHeight` UInt16,
`ResolutionDepth` UInt8,
`FlashMajor` UInt8,
`FlashMinor` UInt8,
`FlashMinor2` String,
`NetMajor` UInt8,
`NetMinor` UInt8,
`UserAgentMajor` UInt16,
`UserAgentMinor` FixedString(2),
`CookieEnable` UInt8,
`JavascriptEnable` UInt8,
`IsMobile` UInt8,
`MobilePhone` UInt8,
`MobilePhoneModel` String,
`Params` String,
`IPNetworkID` UInt32,
`TraficSourceID` Int8,
`SearchEngineID` UInt16,
`SearchPhrase` String,
`AdvEngineID` UInt8,
`IsArtifical` UInt8,
`WindowClientWidth` UInt16,
`WindowClientHeight` UInt16,
`ClientTimeZone` Int16,
`ClientEventTime` DateTime,
`SilverlightVersion1` UInt8,
`SilverlightVersion2` UInt8,
`SilverlightVersion3` UInt32,
`SilverlightVersion4` UInt16,
`PageCharset` String,
`CodeVersion` UInt32,
`IsLink` UInt8,
`IsDownload` UInt8,
`IsNotBounce` UInt8,
`FUniqID` UInt64,
`HID` UInt32,
`IsOldCounter` UInt8,
`IsEvent` UInt8,
`IsParameter` UInt8,
`DontCountHits` UInt8,
`WithHash` UInt8,
`HitColor` FixedString(1),
`UTCEventTime` DateTime,
`Age` UInt8,
`Sex` UInt8,
`Income` UInt8,
`Interests` UInt16,
`Robotness` UInt8,
`GeneralInterests` Array(UInt16),
`RemoteIP` UInt32,
`RemoteIP6` FixedString(16),
`WindowName` Int32,
`OpenerName` Int32,
`HistoryLength` Int16,
`BrowserLanguage` FixedString(2),
`BrowserCountry` FixedString(2),
`SocialNetwork` String,
`SocialAction` String,
`HTTPError` UInt16,
`SendTiming` Int32,
`DNSTiming` Int32,
`ConnectTiming` Int32,
`ResponseStartTiming` Int32,
`ResponseEndTiming` Int32,
`FetchTiming` Int32,
`RedirectTiming` Int32,
`DOMInteractiveTiming` Int32,
`DOMContentLoadedTiming` Int32,
`DOMCompleteTiming` Int32,
`LoadEventStartTiming` Int32,
`LoadEventEndTiming` Int32,
`NSToDOMContentLoadedTiming` Int32,
`FirstPaintTiming` Int32,
`RedirectCount` Int8,
`SocialSourceNetworkID` UInt8,
`SocialSourcePage` String,
`ParamPrice` Int64,
`ParamOrderID` String,
`ParamCurrency` FixedString(3),
`ParamCurrencyID` UInt16,
`GoalsReached` Array(UInt32),
`OpenstatServiceName` String,
`OpenstatCampaignID` String,
`OpenstatAdID` String,
`OpenstatSourceID` String,
`UTMSource` String,
`UTMMedium` String,
`UTMCampaign` String,
`UTMContent` String,
`UTMTerm` String,
`FromTag` String,
`HasGCLID` UInt8,
`RefererHash` UInt64,
`URLHash` UInt64,
`CLID` UInt32,
`YCLID` UInt64,
`ShareService` String,
`ShareURL` String,
`ShareTitle` String,
`ParsedParams` Nested(Key1 String,Key2 String,Key3 String,Key4 String,Key5 String,ValueDouble Float64),
`IslandID` FixedString(16),
`RequestNum` UInt32,
`RequestTry` UInt8
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/{database}/hits_local', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID);
{shard} et {replica} sont des macros générées automatiquement par Alibaba Cloud E-MapReduce (EMR) pour les clusters ClickHouse. Vous pouvez les utiliser directement.
Exécutez la commande suivante pour créer une table distribuée :
Une table distribuée ne stocke pas de données. Elle sert de vue sur les tables sous-jacentes et permet d’exécuter des requêtes distribuées sur plusieurs serveurs. Cet exemple utilise la fonction rand() pour écrire des données de manière aléatoire dans les tables locales de chaque nœud.
CREATE TABLE demo.hits_all on CLUSTER cluster_emr AS demo.hits_local
ENGINE = Distributed(cluster_emr, demo, hits_local, rand());
Quittez le client ClickHouse et exécutez la commande suivante dans le répertoire de l’exemple de jeu de données pour importer les données :
clickhouse-client -h core-1-1 --query "INSERT INTO demo.hits_all FORMAT TSV" --max_insert_block_size=100000 < hits_v1.tsv;
Redémarrez le client ClickHouse pour consulter les données.
Étant donné que les données sont écrites de manière aléatoire, le volume de données peut varier d’un nœud à l’autre.
-
Vérifiez le volume de données de demo.hits_all sur le nœud core-1-1.
select count(*) from demo.hits_all; -
Consultez le volume de données de demo.hits_local sur le nœud core-1-1.
select count(*) from demo.hits_local; -
Vérifiez le volume de données de demo.hits_local sur le nœud core-1-2.
RemarquePour les autres nœuds, vérifiez également le volume de données de demo.hits_local. Consultez les noms des nœuds sur la page Nodes de la console E-MapReduce.
-
Exécutez la commande suivante pour vous connecter au client ClickHouse :
clickhouse-client -h core-1-2 -m -
Dans le client ClickHouse, exécutez la commande suivante pour vérifier le volume de données de demo.hits_local.
select count(*) from demo.hits_local;
-