Tutorial ini menunjukkan cara menulis data secara acak ke tabel lokal di setiap node dalam kluster ClickHouse.
Prasyarat
Diperlukan kluster ClickHouse. Untuk informasi selengkapnya, lihat Create a ClickHouse cluster.
Prosedur
-
Login ke kluster ClickHouse melalui SSH. Untuk informasi selengkapnya, lihat Log on to a cluster.
-
Jalankan perintah berikut untuk mengunduh dataset sampel resmi:
curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv -
Jalankan perintah berikut untuk memulai client ClickHouse:
clickhouse-client -h core-1-1 -mCatatanContoh ini login ke node
core-1-1. Jika Anda memiliki beberapa node core, Anda dapat login ke salah satu dari mereka. -
Jalankan perintah berikut untuk membuat database:
Anda dapat menggunakan parameter
ON CLUSTERuntuk membuat database di semua node dalam kluster. Identifier kluster default adalahcluster_emr.CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr;Perintah tersebut menghasilkan output berikut:
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.
Jalankan perintah berikut untuk membuat tabel replikasi di semua node dalam kluster:
Tabel replikasi membuat beberapa replika data sesuai konfigurasi Anda, sehingga menjamin redundansi data dan konsistensi akhir.
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} dan {replica} adalah makro yang secara otomatis dihasilkan oleh Alibaba Cloud E-MapReduce (EMR) untuk kluster ClickHouse. Anda dapat menggunakannya secara langsung.
Jalankan perintah berikut untuk membuat tabel terdistribusi:
Tabel terdistribusi tidak menyimpan data, melainkan berfungsi sebagai tampilan dari tabel dasar yang memungkinkan Anda menjalankan kueri terdistribusi di beberapa server. Contoh ini menggunakan fungsi rand() untuk menulis data secara acak ke tabel lokal di setiap node.
CREATE TABLE demo.hits_all on CLUSTER cluster_emr AS demo.hits_local
ENGINE = Distributed(cluster_emr, demo, hits_local, rand());
Keluar dari client ClickHouse, lalu jalankan perintah berikut di direktori dataset sampel untuk mengimpor data:
clickhouse-client -h core-1-1 --query "INSERT INTO demo.hits_all FORMAT TSV" --max_insert_block_size=100000 < hits_v1.tsv;Mulai ulang client ClickHouse untuk melihat data.
Karena data ditulis secara acak, jumlah data di setiap node mungkin berbeda.
-
Periksa volume data demo.hits_all di node core-1-1.
select count(*) from demo.hits_all; -
Lihat jumlah data di demo.hits_local di node core-1-1.
select count(*) from demo.hits_local; -
Periksa jumlah data di demo.hits_local di node core-1-2.
CatatanUntuk node lainnya, Anda juga dapat memeriksa volume data demo.hits_local. Nama node dapat dilihat di halaman Nodes di Konsol E-MapReduce.
-
Jalankan perintah berikut untuk login ke client ClickHouse:
clickhouse-client -h core-1-2 -m -
Di client ClickHouse, jalankan perintah berikut untuk memeriksa volume data demo.hits_local.
select count(*) from demo.hits_local;
-