Skip to main content

概要

ニューヨーク市のタクシーのサンプルデータセットを使って、ClickHouseでデータを取り込み、クエリを実行する方法を学びます。

前提条件

このチュートリアルを完了するには、稼働中の ClickHouse サービスにアクセスできる必要があります。手順については、クイックスタート ガイドを参照してください。
1

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

New York City のタクシーデータセットには、チップ額、通行料、支払い種別などのカラムを含む、数百万件のタクシー乗車データの詳細が含まれています。このデータを保存するテーブルを作成します。
  1. SQL コンソールに接続します。
    • ClickHouse Cloud の場合は、ドロップダウンメニューからサービスを選択し、左側のナビゲーションメニューで SQL Console を選択します。
    • セルフマネージド ClickHouse の場合は、https://_hostname_:8443/play にある SQL コンソールに接続します。詳細は ClickHouse 管理者に確認してください。
  2. default データベースに次の trips テーブルを作成します。
2

データセットを追加する

テーブルを作成したら、次は S3 内の CSVファイルからニューヨーク市のタクシーデータを追加します。
  1. 次のコマンドは、S3 上の 2 つの異なるファイル trips_1.tsv.gztrips_2.tsv.gz から、約 2,000,000 行を trips テーブルに insert します。
  2. INSERT が完了するまで待ちます。150 MB のデータのダウンロードに少し時間がかかる場合があります。
  3. insert が完了したら、正しく実行されたことを確認します。
    このクエリは 1,999,657 行を返すはずです。
3

データを分析する

データを分析するクエリを実行してみましょう。以下の例を参考にするか、独自のSQLクエリを試してください。
  • 平均チップ額を計算します:

  • 乗客数に基づく平均コストを計算します:

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

  • 地区ごとの1日あたりの乗車数を計算します。

  • 各移動の所要時間を分単位で計算し、移動時間ごとに結果をグループ化します。

  • 各地区のピックアップ件数を、1日の各時間帯別に表示します:

  1. ラガーディア空港またはJFK空港行きの乗車データを取得します:

4

Dictionaryを作成する

Dictionaryとは、メモリに格納されたキー・バリューペアのマッピングです。詳細については、Dictionariesを参照してください。ClickHouseサービス内のテーブルに関連付けられたDictionaryを作成します。 テーブルとDictionaryは、ニューヨーク市の各地区の行を含むCSVファイルをもとにしています。各地区は、ニューヨーク市の5つの行政区 (Bronx、Brooklyn、Manhattan、Queens、Staten Island) およびニューアーク空港 (EWR) の名称に対応しています。以下は、使用しているCSVファイルのテーブル形式での抜粋です。ファイル内のLocationIDカラムは、tripsテーブルのpickup_nyct2010_gidカラムおよびdropoff_nyct2010_gidカラムに対応しています:
  1. 次のSQLコマンドを実行すると、taxi_zone_dictionary という名前のDictionaryが作成され、S3 上のCSVファイルからデータが読み込まれます。ファイルのURLは https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv です。
LIFETIME を 0 に設定すると、自動更新が無効になり、S3バケットへの不要なトラフィックを防げます。ほかの場合は、異なる設定にすることもあります。詳しくは、LIFETIME を使用した Dictionary データの更新 を参照してください。
  1. 正しく動作していることを確認します。以下は265行、つまり各地区に対して1行ずつ返されるはずです:
  2. 辞書から値を取得するには、dictGet 関数 (またはその派生関数) を使用します。辞書名、取得したい値、キー (この例では taxi_zone_dictionaryLocationID カラム) を渡します。 たとえば、次のクエリは、LocationID が 132 の Borough を返します。これはJFK空港に該当します):
    JFK はクイーンズにあります。値の取得時間がほぼ 0 であることに注目してください。
  3. dictHas 関数を使用すると、Dictionary にキーが存在するかどうかを確認できます。たとえば、次のクエリは 1 (ClickHouse では「true」) を返します。
  4. 以下のクエリは、4567 が Dictionary 内の LocationID の値ではないため、0 を返します。
  5. クエリで borough の名前を取得するには、dictGet 関数を使用します。たとえば、次のとおりです:
    このクエリは、降車地がラガーディア空港または JFK 空港のいずれかであるタクシーの乗車数を行政区ごとに合計します。結果は次のようになり、乗車エリアが不明な移動がかなり多いことに注意してください:
5

JOIN を実行する

taxi_zone_dictionarytrips テーブルと結合するクエリをいくつか書いてみましょう。
  1. まずは、上の空港クエリとほぼ同じように動作するシンプルな JOIN から始めます。
    応答は dictGet クエリの場合と同じように見えます。
上の JOIN クエリの出力は、それ以前の dictGetOrDefault を使用したクエリと同じです (Unknown の値が含まれない点を除きます) 。内部では、ClickHouse は実際には taxi_zone_dictionary Dictionary に対して dictGet 関数を呼び出していますが、JOIN 構文の方が SQL 開発者にはなじみやすいでしょう。
  1. このクエリは、チップ額が最も高い 1000 件の trip の行を返し、その後、各行を Dictionary と内部結合します。
一般に、ClickHouse では SELECT * を多用することは避けます。実際に必要なカラムだけを取得してください。

次のステップ

ClickHouse についてさらに詳しくは、以下のドキュメントをご覧ください。
Last modified on July 2, 2026