Перейти к основному содержимому
Перейти к основному содержимому

Датасет цен на недвижимость в Великобритании

Проекции — это отличный способ улучшить производительность запросов, которые вы выполняете часто. Мы продемонстрируем мощность проекций, используя датасет о недвижимости в Великобритании, который содержит данные о ценах, уплаченных за недвижимость в Англии и Уэльсе. Данные доступны с 1995 года, а размер датасета в несжатом виде составляет около 4 GiB (что займет только около 278 MiB в ClickHouse).

Создание таблицы

Предобработка и вставка данных

Мы используем функцию url, чтобы стримить данные в ClickHouse. Сначала нам нужно предварительно обработать некоторые входящие данные, включая:

  • Разделение postcode на два разных столбца - postcode1 и postcode2, что лучше для хранения и запросов.
  • Преобразование поля time в дату, так как оно содержит только время 00:00.
  • Игнорирование поля UUid, так как оно не нужно для анализа.
  • Преобразование type и duration в более читаемые поля Enum с помощью функции transform.
  • Преобразование поля is_new из строкового значения единичного символа (Y/N) в поле UInt8 с 0 или 1.
  • Удаление последних двух столбцов, так как они все имеют одно и то же значение (которое равно 0).

Функция url стримит данные с веб-сервера в вашу таблицу ClickHouse. Следующая команда вставляет 5 миллионов строк в таблицу uk_price_paid:

Подождите, пока данные будут вставлены - это займет минуту или две в зависимости от скорости сети.

Проверка данных

Давайте проверим, все ли прошло успешно, посмотрев, сколько строк было вставлено:

На момент выполнения этого запроса в датасете было 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):

Снова результат тот же, но обратите внимание на улучшение в производительности запроса:

Протестируйте это в Плейграунде

Датасет также доступен в Онлайн Плейграунде.