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

Набор данных Библиотеки Нью-Йорка «Что в меню?»

Набор данных создан Библиотекой Нью-Йорка. Он содержит исторические данные о меню гостиниц, ресторанов и кафе с блюдами и их ценами.

Источник: 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, которая будет содержать все данные, объединенные вместе:

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

Запрос:

Результат:

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

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

Запрос:

Результат:

Отнеситесь к этому с осторожностью.

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

Запрос:

Результат:

Водка

Запрос:

Результат:

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

Икра

Давайте выведем цены на икру. Также давайте выведем название любого блюда с икрой.

Запрос:

Результат:

По крайней мере, у них есть икра с водкой. Очень приятно.

Онлайн-площадка

Данные загружены в ClickHouse Playground, пример.