食谱数据集
RecipeNLG 数据集可在 此处 下载。其中包含 220 万份食谱。大小略小于 1 GB。
下载并解压数据集
- 进入下载页面https://recipenlg.cs.put.poznan.pl/dataset。
- 接受条款和条件并下载 zip 文件。
- 使用
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 中体验。