Skip to main content
2021 年 11 月,YouTube 移除了所有视频公开显示的 点踩 数。虽然创作者仍然可以看到点踩数量,但观众只能看到某个视频获得了多少 点赞。
该数据集包含超过 45.5 亿条记录,因此除非你的资源能够承载如此规模的数据量,否则请谨慎直接复制粘贴下面的命令。下面的命令是在 ClickHouse Cloud 的 生产环境实例上执行的。
这些数据采用 JSON 格式,可从 archive.org 下载。我们也已将相同的数据提供在 S3 上,以便更高效地将其下载到 ClickHouse Cloud 实例中。 以下是在 ClickHouse Cloud 中创建表并插入数据的步骤。
下面的步骤同样也适用于本地安装的 ClickHouse。唯一需要修改的是使用 s3 函数而不是 s3cluster (除非你已经配置了集群——在这种情况下,将 default 改为你的集群名称) 。

分步指南

1

数据探索

让我们看看这些数据的样子。s3cluster 表函数会返回一个表,因此我们可以对结果执行 DESCRIBE:
ClickHouse 会从 JSON 文件中推断出以下 schema:
2

创建表

根据推断出的 schema,我们对数据类型进行了整理,并添加了主键。 定义如下表:
3

插入数据

以下命令会将 S3 文件中的记录流式写入 youtube 表。
这会插入大量数据——46.5 亿行。如果你不需要整个数据集,只需添加一个 LIMIT 子句,并指定所需的行数。
关于我们的 INSERT 命令,有几点说明:
  • 当传入的日期字段格式可能不正确时,parseDateTimeBestEffortUSOrZero 函数会很有用。如果 fetch_date 无法被正确解析,就会被设为 0
  • upload_date 列中既有有效日期,也有像 “4 hours ago” 这样的字符串——这显然不是有效日期。我们决定将原始值存储在 upload_date_str 中,并尝试用 toDate(parseDateTimeBestEffortUSOrZero(upload_date::String)) 对其进行解析。如果解析失败,结果就会是 0
  • 我们使用 ifNull 来避免表中出现 NULL 值。如果传入的值是 NULL,ifNull 函数会将其设为空字符串
4

统计行数

在 ClickHouse Cloud 的 SQL 控制台中打开一个新标签页 (或新开一个 clickhouse-client 窗口) ,观察计数持续增加。 插入 45.6 亿行需要一些时间,具体取决于服务器资源。 (如果不调整任何设置,大约需要 4.5 小时。)
5

探索数据

数据插入后,不妨统计一下你喜欢的视频或频道被点踩的次数。让我们看看 ClickHouse 上传了多少个视频:
上面的查询之所以运行得这么快,是因为我们将 uploader 选作主键的第一列,因此只需处理 23.7 万行。
下面来看看 ClickHouse 视频的点赞和点踩情况:
响应如下:
以下是对 title 或 description 字段中包含 ClickHouse 的视频进行的搜索:
该查询需要处理每一行数据,还要解析两列 String。即便如此,性能仍然相当不错,达到 415 万行/秒:
结果如下:

常见问题

如果有人关闭评论功能,是否会降低人们实际去点“点赞”或“点踩”的可能性?

关闭评论后,人们是否更倾向于通过点赞或点踩来表达自己对视频的感受?
启用评论似乎与更高的互动率有关。

视频数量随时间如何变化——有哪些值得注意的事件?

在新冠疫情前后,上传者数量明显激增。

字幕是从什么时候开始逐渐增多的

随着语音识别技术的进步,给视频制作字幕比以往任何时候都更容易。YouTube 在 2009 年底推出了自动字幕功能——字幕数量的增长是从那时开始的吗?
数据显示,2009 年出现了一个峰值。显然,当时 YouTube 正在取消其社区字幕功能,该功能允许用户为他人的视频上传字幕。 这促成了一场非常成功的倡议活动,推动创作者为自己的视频添加字幕,方便听障和失聪观众观看。

主要上传者随时间变化

随着观看量增加,点赞率如何变化?

观看量是如何分布的?

最后修改于 2026年6月10日