Набор данных "Что на меню?" Нью-Йоркской публичной библиотеки
Набор данных создан Нью-Йоркской публичной библиотекой. Он содержит исторические данные о меню отелей, ресторанов и кафе с блюдами и их ценами.
Источник: 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, пример.