食谱数据集
RecipeNLG 数据集可从 这里 下载。该数据集包含 220 万个食谱,大小略低于 1 GB。
下载并解压数据集
- 访问下载页面 https://recipenlg.cs.put.poznan.pl/dataset。
- 接受条款和条件并下载压缩文件。
- 可选:使用
md5sum dataset.zip
验证压缩文件,其值应为3a168dfd0912bb034225619b3586ce76
。 - 使用
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个步骤来制作!显示该步骤:
查询:
结果:
在线演示
数据集也可以在 在线演示 中查看。