すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:ClickHouse のクイックスタート

最終更新日:Jun 21, 2026

このチュートリアルでは、ClickHouse クラスターの各ノードのローカルテーブルに、データをランダムに書き込む方法を説明します。

前提条件

ClickHouse クラスターが必要です。詳細については、「Create a ClickHouse cluster」をご参照ください。

手順

  1. SSH 経由で ClickHouse クラスターにログインします。詳細については、「Log on to a cluster」をご参照ください。

  2. 次のコマンドを実行して、公式サンプルデータセットをダウンロードします。

    curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz  | unxz --threads=`nproc` > hits_v1.tsv
  3. 次のコマンドを実行して、ClickHouse クライアントを起動します。

    clickhouse-client -h core-1-1 -m
    説明

    この例では、core-1-1 ノードにログインします。複数のコアノードがある場合は、そのいずれか 1 つにログインできます。

  4. 次のコマンドを実行して、データベースを作成します。

    ON CLUSTER パラメーターを使用すると、クラスター内のすべてのノードにデータベースを作成できます。デフォルトのクラスター識別子は cluster_emr です。

    CREATE DATABASE IF NOT EXISTS demo on CLUSTER cluster_emr;

    コマンドの実行結果は次のとおりです。

    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
    クエリ ID: ecf856dc-3490-498a-8368-386f38dcxxx
    ┌─ホスト──────────────────────────────────────────────────┬─ポート─┬─ステータス─┬─エラー─┬─残りのホスト数─┬─アクティブなホスト数─┐
    │ core-1-1.c-2ecd13e05xxx.cn-hangzhou.emr.aliyuncs.com  │ 9000 │      0 │       │                   0 │                0 │
    └───────────────────────────────────────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
    1 行セット。 経過時間: 0.123 秒
  • 次のコマンドを実行して、クラスター内のすべてのノードにレプリケートテーブルを作成します。

    レプリケートテーブルは、設定に基づいて複数のデータレプリカを作成します。これにより、データの冗長性と結果整合性が確保されます。

    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}{replica} は、Alibaba Cloud E-MapReduce (EMR) が ClickHouse クラスター用に自動生成するマクロです。これらはそのまま使用できます。

  • 次のコマンドを実行して、分散テーブルを作成します。

    分散テーブルはデータを保存しません。基になるテーブルのビューとして機能し、複数のサーバーにまたがる分散クエリを実行できます。この例では、rand() 関数を使用して、各ノードのローカルテーブルにデータをランダムに書き込みます。

    CREATE TABLE demo.hits_all on CLUSTER cluster_emr AS demo.hits_local 
    ENGINE = Distributed(cluster_emr, demo, hits_local, rand());
  • ClickHouse クライアントを終了し、サンプルデータセットのディレクトリで次のコマンドを実行してデータをインポートします。

    clickhouse-client -h core-1-1 --query "INSERT INTO demo.hits_all FORMAT TSV" --max_insert_block_size=100000 < hits_v1.tsv;
  • ClickHouse クライアントを再起動して、データを確認します。

    データはランダムに書き込まれるため、各ノードのデータ量は異なる場合があります。

    • core-1-1 ノードの demo.hits_all のデータ量を確認します。

      select count(*) from demo.hits_all;
    • core-1-1 ノードの demo.hits_local のデータ量を確認します。

      select count(*) from demo.hits_local;
    • core-1-2 ノードの demo.hits_local のデータ量を確認します。

      説明

      残りのノードについても、demo.hits_local のデータ量を確認できます。ノード名は、EMR コンソールの Nodes ページで確認できます。

      1. 次のコマンドを実行して、ClickHouse クライアントにログインします。

        clickhouse-client -h core-1-2 -m
      2. ClickHouse クライアントで、次のコマンドを実行して demo.hits_local のデータ量を確認します。

        select count(*) from demo.hits_local;