概要
ClickHouse を起動する
テーブルを作成する
データセットを追加する
pg_clickhouse をインストールする
pg_clickhouse に接続する
password オプションを指定することもできます。
次に、taxi テーブルを追加します。リモートの
ClickHouseデータベースにあるすべてのテーブルを Postgres スキーマにインポートするだけです:
\det+ を使うと確認できます:
\d を使って、すべてのカラムを表示します。
COUNT() 集約を含む
クエリ全体をプッシュダウンするため、ClickHouse 上で実行され、Postgres には 1
行だけが返されます。確認するには EXPLAIN を使用します:
データを分析する
-
平均チップ額を計算します:
-
乗客数に基づく平均コストを計算します:
-
地区ごとの1日あたりの乗車数を計算します:
-
各移動の所要時間を分単位で計算し、その結果を所要時間ごとに
グループ化します:
-
各地区のピックアップ数を、1日の各時間帯別に表示します:
-
表示用のタイムゾーンをニューヨークに設定し、ラガーディア空港またはJFK
空港への乗車データを取得します:
Dictionary を作成する
LocationID カラムは、trips テーブル内の pickup_nyct2010_gid と
dropoff_nyct2010_gid カラムに対応付けられます。
| LocationID | Borough | Zone | service_zone |
|---|---|---|---|
| 1 | EWR | Newark Airport | EWR |
| 2 | Queens | Jamaica Bay | Boro Zone |
| 3 | Bronx | Allerton/Pelham Gardens | Boro Zone |
| 4 | Manhattan | Alphabet City | Yellow Zone |
| 5 | Staten Island | Arden Heights | Boro Zone |
-
引き続き Postgres で、
clickhouse_raw_query関数を使用して ClickHouse の dictionarytaxi_zone_dictionaryを作成し、 S3 上の CSVファイルから Dictionary にデータを読み込みます。
LIFETIME を 0 に設定すると、自動更新が無効になり、S3 bucket への不要な
トラフィックを回避できます。ほかのケースでは、異なる設定にする
場合もあります。詳細については、LIFETIME を使用した Dictionary データの更新を参照してください。- 次に、これをインポートします。
- クエリを実行できることを確認します:
- すばらしいです。次に、
dictGet関数を使って、クエリ内で 行政区名を取得します。このクエリでは、LaGuardia または JFK 空港で 終了するタクシー乗車数を行政区ごとに合計します:
JOIN を行う
taxi_zone_dictionary と trips
テーブルを結合するクエリをいくつか作成します。
-
まずは、前述の空港に関する
クエリとほぼ同じ動作をするシンプルな
JOINから始めます。
上記の
JOIN クエリの出力は、先ほどの dictGet
クエリと同じであることがわかります (ただし、Unknown の値は含まれません) 。内部的には、
ClickHouse は taxi_zone_dictionary Dictionary に対して dictGet 関数を
実際に呼び出していますが、JOIN 構文のほうが
SQL 開発者にはなじみやすいものです。-
このクエリは、チップ額が最も高い 1000 件の乗車データの行を返し、
続いて各行を dictionary と内部結合します。
一般に、PostgreSQL や ClickHouse では
SELECT * の使用は避けます。
実際に必要なカラムだけを取得してください。