Перейти к основному содержанию
Этот набор данных создан Нью-Йоркской публичной библиотекой. Он содержит исторические данные о меню отелей, ресторанов и кафе с указанием блюд и их цен. Источник: http://menus.nypl.org/data Данные находятся в общественном достоянии. Данные взяты из архива библиотеки, поэтому они могут быть неполными и не очень подходить для статистического анализа. Тем не менее выглядят они весьма аппетитно. Объём набора данных — всего 1,3 миллиона записей о блюдах в меню. Для ClickHouse это совсем небольшой объём данных, но в качестве примера он вполне подходит.

Скачайте набор данных

Выполните команду:
При необходимости замените ссылку на актуальную с сайта http://menus.nypl.org/data. Размер загрузки составляет около 35 МБ.

Распакуйте набор данных

Размер в несжатом виде составляет около 150 МБ. Данные нормализованы и состоят из четырех таблиц:
  • Menu — информация о меню: название ресторана, дата, когда меню было замечено, и т. д.
  • Dish — информация о блюдах: название блюда и некоторые его характеристики.
  • MenuPage — информация о страницах меню, поскольку каждая страница относится к какому-либо меню.
  • MenuItem — элемент меню. Блюдо вместе с его ценой на определенной странице меню: ссылки на блюдо и страницу меню.

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

Мы используем тип данных Decimal для хранения цен.

Импорт данных

Чтобы импортировать данные в ClickHouse, выполните:
Мы используем формат CSVWithNames, так как данные представлены в CSV с заголовком. Мы отключаем format_csv_allow_single_quotes, поскольку в полях данных используются только двойные кавычки, а одинарные кавычки могут встречаться внутри значений и не должны вводить CSV-парсер в заблуждение. Мы отключаем input_format_null_as_default, так как в наших данных нет NULL. В противном случае ClickHouse будет пытаться разобрать последовательности \N и может перепутать их с \ в данных. Настройка date_time_input_format best_effort позволяет разбирать поля DateTime в самых разных форматах. Например, ISO-8601 без секунд, например ‘2000-01-01 01:02’, будет распознан. Без этой настройки допускается только фиксированный формат DateTime.

Денормализуйте данные

Данные представлены в нескольких таблицах в нормализованной форме. Это означает, что, например, чтобы получить названия блюд из пунктов меню, вам потребуется выполнить JOIN. Для типичных аналитических задач гораздо эффективнее работать с данными, заранее объединёнными с помощью JOIN, чтобы не выполнять JOIN каждый раз. Такие данные называются “денормализованными”. Мы создадим таблицу menu_item_denorm, которая будет содержать все данные, объединённые с помощью JOIN:

Проверьте данные

Query
Response

Выполните несколько запросов

Средние исторические цены на блюда

Query
Response
Не принимайте это за чистую монету.

Цены на бургеры

Query
Response

Водка

Query
Response
Чтобы получить vodka, нам нужно написать ILIKE '%vodka%', и это, безусловно, звучит эффектно.

Икра

Выведем цены на икру. Также выведем название любого блюда с икрой.
Query
Response
По крайней мере, у них есть икра с водкой. Очень даже неплохо.

Онлайн-песочница

Данные загружены в Песочницу ClickHouse, вот пример.
Последнее изменение 3 июля 2026 г.