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

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

Проекции — отличное средство для повышения производительности запросов, которые вы часто выполняете. Мы продемонстрируем мощь проекций, используя набор данных о недвижимости в Великобритании, который содержит данные о ценах, уплаченных за недвижимость в Англии и Уэльсе. Данные доступны с 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):

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

Протестируйте это в Playground

Набор данных также доступен в Онлайн Playground.