能否用BigQuery获取PyPI下载量时间分箱统计?能否修改查询实现30天维度统计?
没问题,这就帮你搞定这两个关于PyPI下载量统计的需求👇
1. 获取PyPI下载量的时间分箱统计
当然可以!你可以根据需要按天、周、月或者自定义时间间隔来做分箱统计。比如最常用的按天统计,只需要对下载日期做截断,再分组计数就行。这里给你写个示例查询:
#standardSQL SELECT DATE_TRUNC(timestamp, DAY) AS date, COUNT(*) AS num_downloads FROM `the-psf.pypi.downloads*` WHERE file.project = 'pycotools' AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 180 DAY)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE()) GROUP BY date ORDER BY date ASC
如果想按周/月统计,只需要把DATE_TRUNC(timestamp, DAY)里的DAY换成WEEK或者MONTH就行。要是需要自定义分箱(比如每12小时),可以用TIMESTAMP_TRUNC(timestamp, HOUR)再做整除分组,灵活得很。
2. 按每30天周期统计自包上传以来的下载量
要实现按每30天输出统计结果,咱们可以用日期计算生成每个周期的起始日期,再把下载记录归到对应的周期里。这里给你修改后的查询,刚好匹配你要的CSV格式:
#standardSQL SELECT FORMAT_DATE('%d-%m-%Y', period_start) AS date, COUNT(*) AS count FROM ( SELECT timestamp, -- 计算每条记录所属的30天周期起始日期 DATE_SUB( DATE_TRUNC(timestamp, DAY), INTERVAL MOD(DATE_DIFF(DATE_TRUNC(timestamp, DAY), (SELECT MIN(DATE_TRUNC(timestamp, DAY)) FROM `the-psf.pypi.downloads*` WHERE file.project = 'pycotools')), 30) DAY ) AS period_start FROM `the-psf.pypi.downloads*` WHERE file.project = 'pycotools' ) GROUP BY period_start ORDER BY period_start ASC
导出CSV的步骤:
- 在BigQuery控制台运行上面的查询,等结果加载完成
- 点击结果面板右上角的**「导出」**按钮
- 选择**「CSV」**格式,设置好存储路径(比如Google Cloud Storage或者直接下载到本地),确认导出就行
这个查询会自动从你的包第一次有下载记录的日期开始,每30天作为一个周期统计下载量,输出的date列就是每个周期的起始日期,格式和你要的dd-mm-yyyy完全一致。
内容的提问来源于stack exchange,提问作者CiaranWelsh
相关产品推荐
相关产品推荐

