Набор данных рецептов
Набор данных RecipeNLG доступен для загрузки здесь. Он содержит 2,2 миллиона рецептов. Размер составляет чуть менее 1 ГБ.
Загрузка и распаковка набора данных
- Перейдите на страницу загрузки https://recipenlg.cs.put.poznan.pl/dataset.
- Примите условия и загрузите zip-файл.
- Вариант: Используйте
md5sum dataset.zip
, чтобы проверить zip-файл; он должен равняться3a168dfd0912bb034225619b3586ce76
. - Распакуйте zip-файл с помощью
unzip dataset.zip
. Вы получите файлfull_dataset.csv
в директорииdataset
.
Создание таблицы
Запустите clickhouse-client и выполните следующий запрос CREATE:
Вставка данных
Выполните следующую команду:
Это демонстрация того, как парсить собственный 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
, которое распознается как SQL NULL. Мы добавляем параметр--input_format_allow_errors_num 10
, и до десяти некорректных записей могут быть пропущены; - Массивы содержатся для полей ingredients, directions и NER; эти массивы представлены в необычной форме: они сериализованы в строку как JSON и затем помещены в CSV — мы парсим их как String и затем используем функцию JSONExtract, чтобы преобразовать их в Array.
Валидация вставленных данных
Проверив количество строк:
Запрос:
Результат:
Примеры запросов
Наиболее употребляемые компоненты по количеству рецептов:
В этом примере мы узнаем, как использовать функцию arrayJoin для развертывания массива в набор строк.
Запрос:
Результат:
Самые сложные рецепты с клубникой
Результат:
В этом примере мы используем has функцию для фильтрации по элементам массива и сортируем по количеству инструкций.
Существует свадебный торт, который требует целых 126 шагов для его приготовления! Покажем все инструкции:
Запрос:
Результат:
Онлайн-игровая площадка
Набор данных также доступен в Онлайн-игровой площадке.