跳到主要内容
跳到主要内容

食谱数据集

The RecipeNLG 数据集可以从 这里 下载。它包含 220 万个食谱,大小略少于 1 GB。

下载并解压数据集

  1. 访问下载页面 https://recipenlg.cs.put.poznan.pl/dataset
  2. 接受条款和条件并下载 zip 文件。
  3. 选项:使用 md5sum dataset.zip 验证 zip 文件,结果应为 3a168dfd0912bb034225619b3586ce76
  4. 使用 unzip dataset.zip 解压 zip 文件。您将在 dataset 目录中获得 full_dataset.csv 文件。

创建表

运行 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 参数,最多可以跳过十条格式不正确的记录;
  • 对于配料、方向和 NER 字段,有数组;这些数组以不寻常的形式表示:它们被序列化为字符串形式的 JSON,然后放置在 CSV 中 - 我们将它们解析为字符串,然后使用 JSONExtract 函数将其转换为数组。

验证插入的数据

通过检查行数:

查询:

结果:

示例查询

按食谱数量查看顶级成分

在这个例子中,我们学习如何使用 arrayJoin 函数将数组扩展为一组行。

查询:

结果:

最复杂的草莓食谱

结果:

在此示例中,我们使用 has 函数按数组元素筛选并按步骤数量排序。

有一个婚礼蛋糕需要 126 个步骤才能制作完成!显示这些步骤:

查询:

结果:

在线游乐场

数据集也可以在 在线游乐场 中找到。