UKプロパティ価格データセット
プロジェクションは、頻繁に実行するクエリのパフォーマンスを向上させる素晴らしい方法です。英国とウェールズの不動産物件に支払われた価格に関するデータを含むUKプロパティデータセットを使用して、プロジェクションの力を示します。このデータは1995年から利用可能で、圧縮されていない形式のデータセットのサイズは約4 GiB(ClickHouseでは約278 MiBしかかかりません)。
- ソース: https://www.gov.uk/government/statistical-data-sets/price-paid-data-downloads
- フィールドの説明: https://www.gov.uk/guidance/about-the-price-paid-data
- HM土地登記局データを含む © Crown copyright and database right 2021。このデータはOpen Government Licence v3.0の下でライセンスされています。
テーブルの作成
データの前処理と挿入
url
関数を使用して、データをClickHouseにストリーミングします。その前に、いくつかの入力データの前処理を行う必要があります。これには以下が含まれます:
postcode
を2つの異なるカラム -postcode1
とpostcode2
に分割します。これはストレージとクエリの観点からより良いです。time
フィールドを日時に変換します。なぜなら、そこには00:00の時間しか含まれていないからです。- 分析に不要なUUIDフィールドを無視します。
- transform関数を使用して、
type
とduration
をより読みやすい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)
、district
、town
のディメンションごとに集約プロジェクションを作成しましょう:
既存のデータに対してプロジェクションをポピュレートします(物化せずに作成されたプロジェクションは、新しく挿入されたデータに対してのみ作成されます):
パフォーマンスをテストする
再度、同じ3つのクエリを実行してみましょう:
クエリ1. 年ごとの平均価格
結果は同じですが、パフォーマンスは改善されています!
クエリ2. ロンドンの年ごとの平均価格
同じ結果ですが、クエリパフォーマンスが改善されたことに注意してください:
クエリ3. 最も高価な地域
条件(date >= '2020-01-01')をプロジェクションのディメンション(toYear(date) >= 2020
)に合わせて修正する必要があります:
結果は再び同じですが、クエリパフォーマンスが改善されたことに注意してください:
Playgroundでテストする
データセットはオンラインプレイグラウンドでも利用可能です。