概要
前提条件
新しいテーブルを作成する
New York City のタクシーデータセットには、チップ額、通行料、支払い種別などのカラムを含む、数百万件のタクシー乗車データの詳細が含まれています。このデータを保存するテーブルを作成します。-
SQL コンソールに接続します。
- ClickHouse Cloud の場合は、ドロップダウンメニューからサービスを選択し、左側のナビゲーションメニューで SQL Console を選択します。
- セルフマネージド ClickHouse の場合は、
https://_hostname_:8443/playにある SQL コンソールに接続します。詳細は ClickHouse 管理者に確認してください。
-
defaultデータベースに次のtripsテーブルを作成します。
データセットを追加する
テーブルを作成したら、次は S3 内の CSVファイルからニューヨーク市のタクシーデータを追加します。-
次のコマンドは、S3 上の 2 つの異なるファイル
trips_1.tsv.gzとtrips_2.tsv.gzから、約 2,000,000 行をtripsテーブルに insert します。 -
INSERTが完了するまで待ちます。150 MB のデータのダウンロードに少し時間がかかる場合があります。 -
insert が完了したら、正しく実行されたことを確認します。
このクエリは 1,999,657 行を返すはずです。
データを分析する
データを分析するクエリを実行してみましょう。以下の例を参考にするか、独自のSQLクエリを試してください。-
平均チップ額を計算します:
想定される出力
-
乗客数に基づく平均コストを計算します:
期待される出力
passenger_countは 0 から 9 の範囲です。 -
地区ごとの1日あたりの乗車数を計算します。
出力例
-
各移動の所要時間を分単位で計算し、移動時間ごとに結果をグループ化します。
想定される出力
-
各地区のピックアップ件数を、1日の各時間帯別に表示します:
期待される出力
-
ラガーディア空港またはJFK空港行きの乗車データを取得します:
想定される出力
Dictionaryを作成する
Dictionaryとは、メモリに格納されたキー・バリューペアのマッピングです。詳細については、Dictionariesを参照してください。ClickHouseサービス内のテーブルに関連付けられたDictionaryを作成します。 テーブルとDictionaryは、ニューヨーク市の各地区の行を含むCSVファイルをもとにしています。各地区は、ニューヨーク市の5つの行政区 (Bronx、Brooklyn、Manhattan、Queens、Staten Island) およびニューアーク空港 (EWR) の名称に対応しています。以下は、使用しているCSVファイルのテーブル形式での抜粋です。ファイル内のLocationIDカラムは、tripsテーブルのpickup_nyct2010_gidカラムおよびdropoff_nyct2010_gidカラムに対応しています:| LocationID | 行政区 | ゾーン | service_zone |
|---|---|---|---|
| 1 | EWR | ニューアーク空港 | EWR |
| 2 | クイーンズ | ジャマイカ湾 | ボローゾーン |
| 3 | ブロンクス | アラートン/ペルハム・ガーデンズ | ボローゾーン |
| 4 | マンハッタン | アルファベット・シティ | イエローゾーン |
| 5 | スタテン・アイランド | アーデン・ハイツ | ボロゾーン |
- 次の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 データの更新 を参照してください。-
正しく動作していることを確認します。以下は265行、つまり各地区に対して1行ずつ返されるはずです:
-
辞書から値を取得するには、
dictGet関数 (またはその派生関数) を使用します。辞書名、取得したい値、キー (この例ではtaxi_zone_dictionaryのLocationIDカラム) を渡します。 たとえば、次のクエリは、LocationIDが 132 のBoroughを返します。これはJFK空港に該当します):JFK はクイーンズにあります。値の取得時間がほぼ 0 であることに注目してください。 -
dictHas関数を使用すると、Dictionary にキーが存在するかどうかを確認できます。たとえば、次のクエリは1(ClickHouse では「true」) を返します。 -
以下のクエリは、4567 が Dictionary 内の
LocationIDの値ではないため、0 を返します。 -
クエリで borough の名前を取得するには、
dictGet関数を使用します。たとえば、次のとおりです:このクエリは、降車地がラガーディア空港または JFK 空港のいずれかであるタクシーの乗車数を行政区ごとに合計します。結果は次のようになり、乗車エリアが不明な移動がかなり多いことに注意してください:
JOIN を実行する
taxi_zone_dictionary を trips テーブルと結合するクエリをいくつか書いてみましょう。-
まずは、上の空港クエリとほぼ同じように動作するシンプルな
JOINから始めます。応答はdictGetクエリの場合と同じように見えます。
上の
JOIN クエリの出力は、それ以前の dictGetOrDefault を使用したクエリと同じです (Unknown の値が含まれない点を除きます) 。内部では、ClickHouse は実際には taxi_zone_dictionary Dictionary に対して dictGet 関数を呼び出していますが、JOIN 構文の方が SQL 開発者にはなじみやすいでしょう。- このクエリは、チップ額が最も高い 1000 件の trip の行を返し、その後、各行を Dictionary と内部結合します。
一般に、ClickHouse では
SELECT * を多用することは避けます。実際に必要なカラムだけを取得してください。次のステップ
- ClickHouse のプライマリインデックス入門: ClickHouse がクエリ時に関連データを効率的に特定するために、スパースプライマリインデックスをどのように使用しているかを学べます。
- 外部データソースを連携する: ファイル、Kafka、PostgreSQL、データパイプラインなど、データソースのインテグレーションオプションを確認できます。
- ClickHouse でデータを可視化する: お使いの UI/BI ツールを ClickHouse に接続できます。
- SQL リファレンス: データの変換、処理、分析に使用できる、ClickHouse の SQL 関数を参照できます。