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

Набор данных "Что на меню?" Нью-Йоркской публичной библиотеки

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

Источник: 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 каждый раз. Это называется "денормализованные" данные.

Мы создадим таблицу menu_item_denorm, которая будет содержать все данные, объединенные вместе:

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

Запрос:

Результат:

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

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

Запрос:

Результат:

Следует принять это с долей скепсиса.

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

Запрос:

Результат:

Водка

Запрос:

Результат:

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

Икра

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

Запрос:

Результат:

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

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

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