Набор данных кулинарных рецептов
Набор данных кулинарных рецептов от RecipeNLG доступен для загрузки здесь. Он содержит 2.2 миллиона рецептов, а его размер чуть меньше 1 ГБ.
Загрузите и распакуйте набор данных
- Перейдите на страницу загрузки https://recipenlg.cs.put.poznan.pl/dataset.
- Примите Правила и условия и скачайте zip-архив с набором данных.
- Распакуйте zip-архив и вы получите файл
full_dataset.csv
.
Создайте таблицу
Запустите клиент ClickHouse и выполните следующий запрос для создания таблицы recipes
:
Добавьте данные в таблицу
Чтобы добавить данные из файла full_dataset.csv
в таблицу recipes
, выполните команду:
Это один из примеров анализа пользовательских CSV-файлов с применением специальных настроек.
Пояснение:
- набор данных представлен в формате CSV и требует некоторой предварительной обработки при вставке. Для предварительной обработки используется табличная функция input;
- структура CSV-файла задается в аргументе табличной функции
input
; - поле
num
(номер строки) не нужно — оно считывается из файла, но игнорируется; - при загрузке используется
FORMAT CSVWithNames
, но заголовок в CSV будет проигнорирован (параметром командной строки--input_format_with_names_use_header 0
), поскольку заголовок не содержит имени первого поля; - в файле CSV для разделения строк используются только двойные кавычки. Но некоторые строки не заключены в двойные кавычки, и чтобы одинарная кавычка не рассматривалась как заключающая, используется параметр
--format_csv_allow_single_quote 0
; - некоторые строки из CSV не могут быть считаны корректно, поскольку они начинаются с символов
\M/
, тогда как в CSV начинаться с обратной косой черты могут только символы\N
, которые распознаются какNULL
в SQL. Поэтому используется параметр--input_format_allow_errors_num 10
, разрешающий пропустить до десяти некорректных записей; - массивы
ingredients
,directions
иNER
представлены в необычном виде: они сериализуются в строку формата JSON, а затем помещаются в CSV — тогда они могут считываться и обрабатываться как обычные строки (String
). Чтобы преобразовать строку в массив, используется функция JSONExtract.
Проверьте добавленные данные
Чтобы проверить добавленные данные, подсчитайте количество строк в таблице:
Запрос:
Результат:
Примеры запросов
Самые упоминаемые ингридиенты в рецептах:
В этом примере вы узнаете, как развернуть массив в набор строк с помощью функции arrayJoin.
Запрос:
Результат:
Самые сложные рецепты с клубникой
Запрос:
Результат:
В этом примере используется функция has для проверки вхождения элемента в массив, а также сортировка по количеству шагов (length(directions)
).
Существует свадебный торт, который требует целых 126 шагов для производства! Рассмотрим эти шаги:
Запрос:
Результат:
Online Playground
Этот набор данных доступен в Online Playground.