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

食谱数据集

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

下载并解压数据集

  1. 访问下载页面 https://recipenlg.cs.put.poznan.pl/dataset
  2. 接受条款和条件并下载压缩文件。
  3. 可选:使用 md5sum dataset.zip 验证压缩文件,其值应为 3a168dfd0912bb034225619b3586ce76
  4. 使用 unzip dataset.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 - 我们将它们解析为 String,并使用 JSONExtract 函数将其转换为 Array。

验证插入的数据

通过检查行数:

查询:

结果:

示例查询

按食谱数量排序的主要成分:

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

查询:

结果:

最复杂的草莓食谱

结果:

在这个例子中,我们使用了 has 函数来按数组元素进行过滤,并按步骤数排序。

有一个结婚蛋糕需要整整126个步骤来制作!显示该步骤:

查询:

结果:

在线演示

数据集也可以在 在线演示 中查看。