Набор данных публичной библиотеки Нью-Йорка "Что в меню?"
Набор данных создан Нью-Йоркской публичной библиотекой. Он содержит исторические данные о меню отелей, ресторанов и кафе с блюдами, а также их ценами.
Источник: http://menus.nypl.org/data Эти данные находятся в открытом доступе.
Данные взяты из архива библиотеки, и они могут быть неполными и сложными для статистического анализа. Тем не менее, это тоже очень интересно. В наборе всего 1,3 миллиона записей о блюдах в меню — очень небольшой объем данных для ClickHouse, но это все равно хороший пример.
Загрузите набор данных
Выполните команду:
При необходимости замените ссылку на актуальную ссылку с http://menus.nypl.org/data. Размер архива составляет около 35 МБ.
Распакуйте набор данных
Размер распакованных данных составляет около 150 МБ.
Данные нормализованы и состоят из четырех таблиц:
Menu
— информация о меню: название ресторана, дата, когда было просмотрено меню, и т.д.Dish
— информация о блюдах: название блюда вместе с некоторыми характеристиками.MenuPage
— информация о страницах в меню, потому что каждая страница принадлежит какому-либо меню.MenuItem
— один из пунктов меню. Блюдо вместе с его ценой на какой-либо странице меню: ссылки на блюдо и страницу меню.
Создайте таблицы
Для хранения цен используется тип данных Decimal.
Импортируйте данные
Импортируйте данные в ClickHouse, выполните команды:
Поскольку данные представлены в формате CSV с заголовком, используется формат CSVWithNames.
Отключите 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'. Без этой настройки допускается только фиксированный формат даты и времени.
Денормализуйте данные
Данные представлены в нескольких таблицах в нормализованном виде.
Это означает, что вам нужно использовать условие объединения JOIN, если вы хотите получить, например, названия блюд из пунктов меню.
Для типовых аналитических задач гораздо эффективнее работать с предварительно объединенными данными, чтобы не использовать JOIN
каждый раз. Такие данные называются денормализованными.
Создайте таблицу menu_item_denorm
, которая будет содержать все данные, объединенные вместе:
Проверьте загруженные данные
Запрос:
Результат:
Примеры запросов
Усредненные исторические цены на блюда
Запрос:
Результат:
Просто не принимайте это всерьез.
Цены на бургеры
Запрос:
Результат:
Водка
Запрос:
Результат:
Чтобы получить водку, мы должны написать ILIKE '%vodka%'
, и это хорошая идея.
Икра
Посмотрите цены на икру. Получите название любого блюда с икрой.
Запрос:
Результат:
По крайней мере, есть икра с водкой. Очень мило.
Online Playground
Этот набор данных доступен в интерактивном ресурсе Online Playground.