メインコンテンツまでスキップ
メインコンテンツまでスキップ

高度なチュートリアル

このチュートリアルの目的は?

このチュートリアルでは、テーブルを作成し、大規模なデータセット(ニューヨークのタクシーデータの200万行)を挿入します。その後、データセットに対してクエリを実行し、ディクショナリを作成し、それを使用してJOINを実行する方法の例を含めます。

注記

このチュートリアルは、稼働中の ClickHouse サービスにアクセスできることを前提としています。アクセスできない場合は、クイックスタートを参照してください。

1. 新しいテーブルを作成する

ニューヨーク市のタクシーデータには、数百万のタクシー乗車の詳細が含まれており、ピックアップおよびドロップオフの時間と場所、費用、チップの金額、通行料、支払いの種類などのカラムがあります。このデータを保存するためのテーブルを作成しましょう...

  1. SQL コンソールに接続します。
SQLコンソール

SQLクライアント接続が必要な場合、あなたのClickHouse Cloudサービスには関連するウェブベースのSQLコンソールがあります。詳細は下のSQLコンソールに接続を展開してください。

SQLコンソールに接続

あなたのClickHouse Cloudサービス一覧から、サービスをクリックします。

SQLコンソールに接続

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

SQLコンソール

セルフマネージドの ClickHouse を使用している場合は、https://hostname:8443/play で SQL コンソールに接続できます(詳細は ClickHouse 管理者に確認してください)。

  1. default データベースに次の trips テーブルを作成します:

2. データセットを挿入する

テーブルが作成されたので、NYCタクシーデータを追加しましょう。データは S3 の CSV ファイルにあり、そこからデータをロードできます。

  1. 次のコマンドを使用して、2つの異なるファイル trips_1.tsv.gztrips_2.tsv.gz から trips テーブルに約 2,000,000 行を挿入します:

  2. INSERT が完了するまで待ちます - 150MBのデータをダウンロードするのに少々時間がかかる場合があります。

    注記

    s3 関数は、データを解凍する方法を巧妙に知っています。また、TabSeparatedWithNames 形式は、ClickHouse にデータがタブ区切りであることと、それぞれのファイルのヘッダー行をスキップすることを伝えます。

  3. 挿入が完了したら、動作を確認します:

    約200万行(正確には1,999,657行)が表示されます。

    注記

    ClickHouse がカウントを決定するために処理した行数がどれほど少なかったか、そしてどれだけ迅速だったかに注意してください。0.001秒でカウントを取得でき、処理された行数はわずか6行です。

  4. すべての行にヒットする必要があるクエリを実行すると、かなり多くの行を処理する必要がありますが、実行時間は依然として非常に速いことに注意してください:

    このクエリは200万行を処理し、190の値を返しますが、約1秒でこれを実行しています。pickup_ntanameカラムは、タクシー乗車が始まったニューヨーク市の近隣の名前を表します。

3. データを分析する

2M行のデータを分析するクエリを実行してみましょう...

  1. 平均チップ額を計算するなどの簡単な計算から始めます:

    応答は次のようになります:

  2. このクエリは、乗客数に基づく平均コストを計算します:

    passenger_countは0から9の範囲です:

  3. これは、近隣ごとの日別ピックアップ数を計算するクエリです:

    結果は次のようになります:

  4. このクエリは、トリップの長さを計算し、その値で結果をグループ化します:

    結果は次のようになります:

  5. このクエリは、日中の時間ごとのそれぞれの近隣でのピックアップ数を示します:

    結果は次のようになります:

  6. ラガーディアまたはJFK空港への乗車を見てみましょう:

    応答は次のようになります:

4. ディクショナリを作成する

ClickHouseに不慣れな場合は、ディクショナリ の動作を理解することが重要です。ディクショナリを理解するための簡単な方法は、メモリに保存されたキー->バリューのペアのマッピングだと考えることです。このチュートリアルの最後には、ディクショナリに関する詳細およびすべてのオプションへのリンクがあります。

  1. ClickHouseサービスに関連付けられたディクショナリの作成方法を見てみましょう。テーブルおよびそのためのディクショナリは、NYCの各近隣に1行ずつ265行を含むCSVファイルに基づいています。近隣はNYCの区の名前(NYCには5つの区があります:ブロンクス、ブルックリン、マンハッタン、クイーンズ、スタテンアイランド)にマッピングされ、このファイルにはニューアーク空港(EWR)も区としてカウントされます。

これはCSVファイルの一部です(明確性のために表形式で表示されています)。ファイルの LocationID カラムは trips テーブルの pickup_nyct2010_gid および dropoff_nyct2010_gid カラムにマッピングされています:

LocationIDBoroughZoneservice_zone
1EWRニューアーク空港EWR
2クイーンズジャマイカ湾Boro Zone
3ブロンクスオールトン/ペラムガーデンズBoro Zone
4マンハッタンアルファベットシティYellow Zone
5スタテンアイランドアーデンハイツBoro Zone
  1. ファイルの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. 実行されていることを確認します - 各近隣に対して1行(合計265行)を得るべきです:

  2. dictGet 関数(またはそのバリエーション)を使用して、ディクショナリから値を取得します。ディクショナリの名前、取得したい値、およびキー(この例では taxi_zone_dictionaryLocationID カラム)を渡します。

    たとえば、次のクエリは LocationID が132(これは上記のJFK空港です)のBoroughを返します:

    JFKはクイーンズにあり、値を取得するのにかかる時間は事実上ゼロです:

  3. dictHas 関数を使用して、キーがディクショナリに存在するかどうかを確認します。たとえば、次のクエリは1を返します(これはClickHouseでは「真」です):

  4. 次のクエリは0を返します。これは、4567がディクショナリのLocationIDの値ではないためです:

  5. クエリ内でディクショナリから区の名前を取得するために dictGet 関数を使用します。たとえば:

    このクエリは、ラガーディアまたはJFK空港で終了するタクシー乗車の各区あたりの合計数を合計します。結果は次のようになり、ピックアップの近隣が不明な旅行がかなりあることに注意してください:

5. JOINを実行する

taxi_zone_dictionarytripsテーブルを結合するクエリを書いてみましょう。

  1. 以前の空港クエリと同様に機能するシンプルなJOINから始めることができます:

    応答は以前のクエリと同じです:

    注記

    上記のJOINクエリの出力がdictGetOrDefaultを使用した前のクエリと同じであることに注意してください(Unknown の値は含まれていません)。内部的に、ClickHouseは実際にはtaxi_zone_dictionaryディクショナリに対してdictGet関数を呼び出しているのですが、JOIN構文はSQL開発者にとってより馴染みのあるものです。

  2. ClickHouseではSELECT *をあまり使用しません - 実際に必要なカラムのみを取得するべきです!しかし、長時間かかるクエリを見つけるのは困難なので、このクエリは意図的にすべてのカラムを選択し、すべての行を返します(ただし、デフォルトではレスポンスに10,000行の最大上限があります)。また、ディクショナリとの右外部結合を行います:

おめでとうございます!

お疲れ様でした - チュートリアルを通過し、ClickHouseの使い方についてより良い理解を得たことを願っています。次に何をするかのオプションは以下の通りです: