Topik ini menjelaskan cara menulis data secara cepat ke tabel lokal pada setiap node dalam cluster ClickHouse dalam mode acak.
Prasyarat
Cluster ClickHouse telah dibuat. Untuk informasi lebih lanjut, lihat Buat cluster ClickHouse.
Prosedur
Masuk ke cluster ClickHouse dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke 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.tsvJalankan perintah berikut untuk memulai klien ClickHouse:
clickhouse-client -h core-1-1 -mCatatanDalam contoh perintah, core-1-1 menunjukkan nama node inti yang Anda masuki. Jika Anda memiliki beberapa node inti, Anda dapat masuk ke salah satu node tersebut.
Jalankan perintah berikut untuk membuat database.
Anda dapat menjalankan perintah berikut yang berisi parameter on CLUSTER untuk membuat database untuk semua node dalam cluster. Secara default, cluster diberi nama cluster_emr.
CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr;Keluaran berikut akan dikembalikan.

Buat tabel replikasi untuk semua node dalam cluster.
Tabel replikasi menghasilkan jumlah salinan data yang sama dengan jumlah replika tabel untuk setiap node dalam cluster, dan data konsisten di seluruh semua replika tabel.
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);CatatanParameter {shard} dan {replica} adalah makro yang secara otomatis dihasilkan oleh Alibaba Cloud E-MapReduce (EMR) untuk cluster ClickHouse dan dapat digunakan langsung.
Jalankan perintah berikut untuk membuat tabel terdistribusi.
Tabel terdistribusi tidak menyimpan data. Ini hanya merupakan tampilan dari tabel dasar. Anda dapat menggunakan tabel terdistribusi untuk melakukan query terdistribusi pada beberapa server. Dalam contoh ini, fungsi acak rand() digunakan. Fungsi ini memastikan bahwa data dapat ditulis secara acak ke tabel lokal 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 klien ClickHouse dan jalankan perintah berikut di direktori tempat data sampel disimpan 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 klien ClickHouse dan lihat data.
Data ditulis secara acak. Oleh karena itu, jumlah data mungkin bervariasi di setiap node.
Jalankan perintah berikut untuk melihat jumlah data dalam tabel demo.hits_all pada node core-1-1:
select count(*) from demo.hits_all;Jalankan perintah berikut untuk melihat jumlah data dalam tabel demo.hits_local pada node core-1-1:
select count(*) from demo.hits_local;Lihat jumlah data dalam tabel demo.hits_local pada node core-1-2.
CatatanAnda dapat melakukan operasi berikut untuk melihat jumlah data dalam tabel demo.hits_local pada node lainnya. Anda dapat melihat nama node pada tab Nodes cluster di konsol E-MapReduce.
Jalankan perintah berikut untuk masuk ke klien ClickHouse:
clickhouse-client -h core-1-2 -mJalankan perintah berikut di klien ClickHouse untuk melihat jumlah data dalam tabel demo.hits_local:
select count(*) from demo.hits_local;