高度なチュートリアル
このチュートリアルの目的は?
このチュートリアルでは、テーブルを作成し、大規模なデータセット(ニューヨークのタクシーデータの200万行)を挿入します。その後、データセットに対してクエリを実行し、ディクショナリを作成し、それを使用してJOINを実行する方法の例を含めます。
このチュートリアルは、稼働中の ClickHouse サービスにアクセスできることを前提としています。アクセスできない場合は、クイックスタートを参照してください。
1. 新しいテーブルを作成する
ニューヨーク市のタクシーデータには、数百万のタクシー乗車の詳細が含まれており、ピックアップおよびドロップオフの時間と場所、費用、チップの金額、通行料、支払いの種類などのカラムがあります。このデータを保存するためのテーブルを作成しましょう...
- SQL コンソールに接続します。
SQLクライアント接続が必要な場合、あなたのClickHouse Cloudサービスには関連するウェブベースのSQLコンソールがあります。詳細は下のSQLコンソールに接続を展開してください。
SQLコンソールに接続
あなたのClickHouse Cloudサービス一覧から、サービスをクリックします。

これにより、SQLコンソールにリダイレクトされます。

セルフマネージドの ClickHouse を使用している場合は、https://hostname:8443/play で SQL コンソールに接続できます(詳細は ClickHouse 管理者に確認してください)。
default
データベースに次のtrips
テーブルを作成します:
2. データセットを挿入する
テーブルが作成されたので、NYCタクシーデータを追加しましょう。データは S3 の CSV ファイルにあり、そこからデータをロードできます。
-
次のコマンドを使用して、2つの異なるファイル
trips_1.tsv.gz
とtrips_2.tsv.gz
からtrips
テーブルに約 2,000,000 行を挿入します: -
INSERT
が完了するまで待ちます - 150MBのデータをダウンロードするのに少々時間がかかる場合があります。注記s3
関数は、データを解凍する方法を巧妙に知っています。また、TabSeparatedWithNames
形式は、ClickHouse にデータがタブ区切りであることと、それぞれのファイルのヘッダー行をスキップすることを伝えます。 -
挿入が完了したら、動作を確認します:
約200万行(正確には1,999,657行)が表示されます。
注記ClickHouse がカウントを決定するために処理した行数がどれほど少なかったか、そしてどれだけ迅速だったかに注意してください。0.001秒でカウントを取得でき、処理された行数はわずか6行です。
-
すべての行にヒットする必要があるクエリを実行すると、かなり多くの行を処理する必要がありますが、実行時間は依然として非常に速いことに注意してください:
このクエリは200万行を処理し、190の値を返しますが、約1秒でこれを実行しています。
pickup_ntaname
カラムは、タクシー乗車が始まったニューヨーク市の近隣の名前を表します。
3. データを分析する
2M行のデータを分析するクエリを実行してみましょう...
-
平均チップ額を計算するなどの簡単な計算から始めます:
応答は次のようになります:
-
このクエリは、乗客数に基づく平均コストを計算します:
passenger_count
は0から9の範囲です: -
これは、近隣ごとの日別ピックアップ数を計算するクエリです:
結果は次のようになります:
-
このクエリは、トリップの長さを計算し、その値で結果をグループ化します:
結果は次のようになります:
-
このクエリは、日中の時間ごとのそれぞれの近隣でのピックアップ数を示します:
結果は次のようになります:
-
ラガーディアまたはJFK空港への乗車を見てみましょう:
応答は次のようになります:
4. ディクショナリを作成する
ClickHouseに不慣れな場合は、ディクショナリ の動作を理解することが重要です。ディクショナリを理解するための簡単な方法は、メモリに保存されたキー->バリューのペアのマッピングだと考えることです。このチュートリアルの最後には、ディクショナリに関する詳細およびすべてのオプションへのリンクがあります。
- ClickHouseサービスに関連付けられたディクショナリの作成方法を見てみましょう。テーブルおよびそのためのディクショナリは、NYCの各近隣に1行ずつ265行を含むCSVファイルに基づいています。近隣はNYCの区の名前(NYCには5つの区があります:ブロンクス、ブルックリン、マンハッタン、クイーンズ、スタテンアイランド)にマッピングされ、このファイルにはニューアーク空港(EWR)も区としてカウントされます。
これはCSVファイルの一部です(明確性のために表形式で表示されています)。ファイルの LocationID
カラムは trips
テーブルの pickup_nyct2010_gid
および dropoff_nyct2010_gid
カラムにマッピングされています:
LocationID | Borough | Zone | service_zone |
---|---|---|---|
1 | EWR | ニューアーク空港 | EWR |
2 | クイーンズ | ジャマイカ湾 | Boro Zone |
3 | ブロンクス | オールトン/ペラムガーデンズ | Boro Zone |
4 | マンハッタン | アルファベットシティ | Yellow Zone |
5 | スタテンアイランド | アーデンハイツ | Boro Zone |
- ファイルのURLは
https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv
です。次のSQLを実行します。このSQLは、taxi_zone_dictionary
という名前のディクショナリを作成し、S3のCSVファイルからディクショナリをポピュレートします:
LIFETIME
を 0 に設定すると、このディクショナリはそのソースと共に決して更新されません。S3バケットへの不必要なトラフィックを送信しないためにここで使用されていますが、一般的に、好みの有効期限の値を指定することができます。
例えば:
は、ディクショナリが1秒から10秒の間のランダムな時間の後に更新されることを指定します(ランダムな時間は、大規模なサーバー数で更新時のディクショナリソースの負荷を分散するために必要です)。
-
実行されていることを確認します - 各近隣に対して1行(合計265行)を得るべきです:
-
dictGet
関数(またはそのバリエーション)を使用して、ディクショナリから値を取得します。ディクショナリの名前、取得したい値、およびキー(この例ではtaxi_zone_dictionary
のLocationID
カラム)を渡します。たとえば、次のクエリは
LocationID
が132(これは上記のJFK空港です)のBorough
を返します:JFKはクイーンズにあり、値を取得するのにかかる時間は事実上ゼロです:
-
dictHas
関数を使用して、キーがディクショナリに存在するかどうかを確認します。たとえば、次のクエリは1を返します(これはClickHouseでは「真」です): -
次のクエリは0を返します。これは、4567がディクショナリの
LocationID
の値ではないためです: -
クエリ内でディクショナリから区の名前を取得するために
dictGet
関数を使用します。たとえば:このクエリは、ラガーディアまたはJFK空港で終了するタクシー乗車の各区あたりの合計数を合計します。結果は次のようになり、ピックアップの近隣が不明な旅行がかなりあることに注意してください:
5. JOINを実行する
taxi_zone_dictionary
とtrips
テーブルを結合するクエリを書いてみましょう。
-
以前の空港クエリと同様に機能するシンプルなJOINから始めることができます:
応答は以前のクエリと同じです:
注記上記の
JOIN
クエリの出力がdictGetOrDefault
を使用した前のクエリと同じであることに注意してください(Unknown
の値は含まれていません)。内部的に、ClickHouseは実際にはtaxi_zone_dictionary
ディクショナリに対してdictGet
関数を呼び出しているのですが、JOIN
構文はSQL開発者にとってより馴染みのあるものです。 -
ClickHouseでは
SELECT *
をあまり使用しません - 実際に必要なカラムのみを取得するべきです!しかし、長時間かかるクエリを見つけるのは困難なので、このクエリは意図的にすべてのカラムを選択し、すべての行を返します(ただし、デフォルトではレスポンスに10,000行の最大上限があります)。また、ディクショナリとの右外部結合を行います:
おめでとうございます!
お疲れ様でした - チュートリアルを通過し、ClickHouseの使い方についてより良い理解を得たことを願っています。次に何をするかのオプションは以下の通りです:
- ClickHouseにおける主キーの動作について読む - この知識はあなたのClickHouse専門家への道を大きく前進させるでしょう
- ファイル、Kafka、PostgreSQL、データパイプライン、または他の多くのデータソースなど、外部データソースを統合する
- お気に入りのUI/BIツールをClickHouseに接続する
- SQLリファレンスをチェックし、さまざまな関数を閲覧する。ClickHouseには、データの変換、処理、分析に関する素晴らしい関数のコレクションがあります
- ディクショナリについてもっと学ぶ