概要
ClickHouse を起動する
テーブルを作成する
データセットを追加する
pg_clickhouse のインストール
pg_clickhouse に接続する
password オプションを指定することもできます。
次に、taxi テーブルを追加します。リモートの
ClickHouse データベースにあるすべてのテーブルを Postgres スキーマにインポートします。
\det+ を使って確認できます:
\d を使用します:
COUNT() 集計を含む
クエリ全体をプッシュダウンするため、ClickHouse 上で実行され、Postgres に返されるのは
1 行だけです。確認するには EXPLAIN を使用します:
データを分析する
-
平均チップ額を計算します:
-
乗客数に基づく平均コストを計算します:
-
地区ごとの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から始めます。
上記の
JOIN クエリの出力は、先ほどの dictGet
クエリと同じであることに注目してください (Unknown の値が含まれない点を除きます) 。内部的には、
ClickHouse は実際には taxi_zone_dictionary Dictionary に対して dictGet 関数を
呼び出していますが、JOIN 構文のほうが SQL 開発者には
なじみがあるでしょう。-
このクエリは、チップ額が最も高い 1000 件の乗車データを返し、
続いて各行をDictionaryと内部結合します。
一般に、PostgreSQL と ClickHouse では
SELECT * の使用は避けます。実際に必要なカラムだけを取得してください。