Набор данных о ценах на недвижимость в Великобритании
Проекции - отличный способ улучшить производительность запросов, которые вы запускаете часто. Мы продемонстрируем мощь проекций, используя набор данных о недвижимости в Великобритании, который содержит данные о ценах, уплаченных за недвижимую собственность в Англии и Уэльсе. Данные доступны с 1995 года, а размер набора данных в несжатом виде составляет около 4 GiB (в ClickHouse это займет всего около 278 MiB).
- Source: https://www.gov.uk/government/statistical-data-sets/price-paid-data-downloads
- Description of the fields: https://www.gov.uk/guidance/about-the-price-paid-data
- Содержит данные HM Land Registry © Crown copyright and database right 2021. Эти данные лицензированы на условиях Open Government Licence v3.0.
Создание таблицы
Предобработка и вставка данных
Мы будем использовать функцию 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
Набор данных также доступен в Online Playground.