Skip to main content
Skip to main content

食谱数据集

RecipeNLG 数据集可在 此处 下载。其中包含 220 万份食谱。大小略小于 1 GB。

下载并解压数据集

  1. 进入下载页面https://recipenlg.cs.put.poznan.pl/dataset
  2. 接受条款和条件并下载 zip 文件。
  3. 使用 unzip 解压 zip 文件,得到 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参数,允许在导入过程中跳过 10 个格式错误;
  • 在数据集中的 Ingredients、directions 和 NER 字段为数组;但这些数组并没有以一般形式表示:这些字段作为 JSON 序列化为字符串,然后放入 CSV 中 - 在导入是将它们解析为字符串,然后使用 JSONExtract 函数将其转换为数组。

验证插入的数据

通过检查行数:

请求:

结果:

示例查询

按配方数量排列的顶级组件

在此示例中,我们学习如何使用 arrayJoin 函数将数组扩展为行的集合。

请求:

结果:

最复杂的草莓食谱

结果:

在此示例中,我们使用 has 函数来按过滤数组类型元素并按 directions 的数量进行排序。

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

请求:

结果:

在线 Playground

此数据集也可在 在线 Playground 中体验。

原文链接