食谱数据集
The RecipeNLG 数据集可以从 这里 下载。它包含 220 万个食谱,大小略少于 1 GB。
下载并解压数据集
- 访问下载页面 https://recipenlg.cs.put.poznan.pl/dataset。
- 接受条款和条件并下载 zip 文件。
- 选项:使用
md5sum dataset.zip
验证 zip 文件,结果应为3a168dfd0912bb034225619b3586ce76
。 - 使用
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 个步骤才能制作完成!显示这些步骤:
查询:
结果:
在线游乐场
数据集也可以在 在线游乐场 中找到。