リアルタイム分析データウェアハウジングCloudOSS
概要
前提条件
1
新しいテーブルを作成する
New York Cityのタクシーデータセットには、数百万件のタクシー乗車記録に関する詳細が含まれています。チップ額、通行料、支払いタイプなどのカラムが含まれます。このデータを格納するテーブルを作成します。
-
SQL Console に接続します。
- ClickHouse Cloud の場合は、ドロップダウンメニューからサービスを選択し、左側のナビゲーションメニューで SQL Console を選択します。
- セルフマネージド ClickHouse の場合は、
https://_hostname_:8443/playの SQL Console に接続します。詳細については、ClickHouse 管理者に確認してください。
-
defaultデータベースに以下のtripsテーブルを作成します。
2
データセットを追加
テーブルを作成したら、S3 上の CSV ファイルから New York City のタクシーデータを追加します。
-
次のコマンドは、S3 上の 2 つのファイル
trips_1.tsv.gzとtrips_2.tsv.gzから約 2,000,000 行をtripsテーブルに挿入します。 -
INSERTが完了するまで待ちます。150 MB のデータのダウンロードには少し時間がかかる場合があります。 -
挿入が完了したら、正しく実行されたことを確認します。
このクエリは 1,999,657 行を返すはずです。
3
データを分析する
いくつかのクエリを実行してデータを分析してみましょう。以下の例を試すか、独自の SQL クエリを実行してみてください。
-
平均チップ額を計算します。
期待される出力
-
乗客数に基づいて平均コストを算出します。
想定される出力
passenger_countは 0 ~ 9 の値を取ります。 -
地区ごとの1日あたりの乗車回数を計算します。
想定される出力
-
各移動の所要時間を分単位で計算し、所要時間ごとに結果をグループ化します。
予想される出力
-
各地域の乗車件数を時間帯別に表示します。
期待される出力
-
ラガーディア空港またはJFK空港への乗車データを取得します。
想定される出力
4
Dictionary を作成する
Dictionary は、メモリ上に保持されるキー・バリューのペアのマッピングです。詳細は Dictionaries を参照してくださいClickHouse サービス内のテーブルに関連付けられた Dictionary を作成します。
このテーブルと Dictionary は、ニューヨーク市の地区ごとに 1 行を持つ CSV ファイルに基づいています。各 neighborhood は、ニューヨーク市の 5 つの borough (Bronx、Brooklyn、Manhattan、Queens、Staten Island) の名称と、Newark Airport (EWR) に対応付けられています。以下は、使用するCSVファイルの内容を表形式で抜粋したものです。ファイル内の
LocationID カラムは、trips テーブルの pickup_nyct2010_gid および dropoff_nyct2010_gid カラムに対応します:- 次のSQLコマンドを実行します。このコマンドは
taxi_zone_dictionaryという名前のDictionaryを作成し、S3上のCSVファイルからデータを読み込んでDictionaryに投入します。ファイルのURLはhttps://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csvです。
LIFETIME を 0 に設定すると、自動更新が無効になり、S3 bucket への不要なトラフィックを回避できます。状況に応じて、別の値を設定することもできます。詳細については、LIFETIME を使用した Dictionary データの更新を参照してください。-
動作を確認します。次のクエリは、各 neighborhood につき 1 行、合計 265 行を返すはずです。
-
dictGet関数 (またはそのバリエーション) を使用して、Dictionary から値を取得します。Dictionary の名前、取得する値、キー (この例ではtaxi_zone_dictionaryのLocationIDカラム) を指定します。 たとえば、次のクエリは、JFK空港に対応するLocationID132 のBoroughを返します。JFKはクイーンズにあります。値の取得時間が実質的に0であることに注目してください。 -
dictHas関数を使用して、Dictionary にキーが存在するかどうかを確認できます。たとえば、次のクエリは1(ClickHouse では “true”) を返します。 -
次のクエリは、4567 が Dictionary 内の
LocationIDに存在しない値であるため、0 を返します。 -
クエリで
dictGet関数を使用して borough の名前を取得します。例:このクエリは、LaGuardia 空港または JFK 空港で終了する区ごとのタクシー乗車記録数を集計します。結果は次のようになります。乗車場所の地域が不明な乗車記録がかなり多いことに注目してください。
5
結合を実行する
taxi_zone_dictionary を trips テーブルと結合するクエリをいくつか作成します。-
まず、上記の空港クエリと同様の動作をする単純な
JOINを実行します。応答はdictGetクエリと同じになります。
上記の
JOIN クエリの出力は、dictGetOrDefault を使用した直前のクエリと同じです (Unknown の値が含まれない点を除く) 。内部では、ClickHouse は taxi_zone_dictionary Dictionary に対して実際には dictGet 関数を呼び出していますが、JOIN 構文の方が SQL 開発者にはなじみがあります。- このクエリは、チップ額が最も高い 1,000 件の乗車記録の行を返した後、各行を Dictionary と内部結合します。
一般に、ClickHouse では
SELECT * を頻繁に使用することは避けます。実際に必要なカラムのみを取得してください。次のステップ
- ClickHouseのプライマリインデックス入門: ClickHouseがクエリ時に関連データを効率的に特定するために、スパースプライマリインデックスをどのように使用するかを学びます。
- 外部データソースを統合する: ファイル、Kafka、PostgreSQL、データパイプラインなど、データソースのインテグレーションオプションを確認します。
- ClickHouseでデータを可視化する: お好みのUI/BIツールをClickHouseに接続します。
- SQLリファレンス: ClickHouseで利用可能な、データの変換、処理、分析のためのSQL関数を参照します。