メインコンテンツまでスキップ
メインコンテンツまでスキップ

UKプロパティ価格データセット

プロジェクションは、頻繁に実行するクエリのパフォーマンスを向上させる素晴らしい方法です。英国とウェールズの不動産物件に支払われた価格に関するデータを含むUKプロパティデータセットを使用して、プロジェクションの力を示します。このデータは1995年から利用可能で、圧縮されていない形式のデータセットのサイズは約4 GiB(ClickHouseでは約278 MiBしかかかりません)。

テーブルの作成

データの前処理と挿入

url 関数を使用して、データをClickHouseにストリーミングします。その前に、いくつかの入力データの前処理を行う必要があります。これには以下が含まれます:

  • postcodeを2つの異なるカラム - postcode1postcode2に分割します。これはストレージとクエリの観点からより良いです。
  • timeフィールドを日時に変換します。なぜなら、そこには00:00の時間しか含まれていないからです。
  • 分析に不要なUUIDフィールドを無視します。
  • transform関数を使用して、typedurationをより読みやすいEnumフィールドに変換します。
  • is_newフィールドを単一文字列(Y/N)からUInt8フィールドに変換します(0または1)。
  • 最後の2つのカラムは、すべて同じ値(0)を持つため、削除します。

url関数は、ウェブサーバーからClickHouseテーブルにデータをストリーミングします。次のコマンドは、uk_price_paidテーブルに500万行を挿入します:

データが挿入されるまで待ちます - ネットワーク速度に応じて1分か2分かかります。

データの検証

挿入された行数を確認することで、正常に動作したかどうかを確認しましょう:

このクエリが実行された時点で、データセットには27,450,499行がありました。ClickHouseにおけるテーブルのストレージサイズを確認しましょう:

テーブルのサイズはわずか221.43 MiBです!

いくつかのクエリを実行する

データを分析するためにいくつかのクエリを実行してみましょう:

クエリ1. 年ごとの平均価格

結果は次のようになります:

クエリ2. ロンドンの年ごとの平均価格

結果は次のようになります:

2020年に家の価格に何かが起こりました!しかし、それはおそらく驚くことではないでしょう...

クエリ3. 最も高価な地域

結果は次のようになります:

プロジェクションを使用してクエリを加速する

プロジェクションを使用すると、事前集約されたデータを任意の形式で保存することによってクエリ速度を改善できます。この例では、年、地区、都市別の平均価格、合計価格、物件数を追跡するプロジェクションを作成します。クエリ時に、ClickHouseがプロジェクションを使用することでクエリのパフォーマンスが改善されると判断した場合、プロジェクションが使用されます(プロジェクションを使用するために特別な操作は不要で、ClickHouseがプロジェクションの有用性を判断します)。

プロジェクションの作成

toYear(date)districttownのディメンションごとに集約プロジェクションを作成しましょう:

既存のデータに対してプロジェクションをポピュレートします(物化せずに作成されたプロジェクションは、新しく挿入されたデータに対してのみ作成されます):

パフォーマンスをテストする

再度、同じ3つのクエリを実行してみましょう:

クエリ1. 年ごとの平均価格

結果は同じですが、パフォーマンスは改善されています!

クエリ2. ロンドンの年ごとの平均価格

同じ結果ですが、クエリパフォーマンスが改善されたことに注意してください:

クエリ3. 最も高価な地域

条件(date >= '2020-01-01')をプロジェクションのディメンション(toYear(date) >= 2020)に合わせて修正する必要があります:

結果は再び同じですが、クエリパフォーマンスが改善されたことに注意してください:

Playgroundでテストする

データセットはオンラインプレイグラウンドでも利用可能です。