You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用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的步骤:

  1. 在BigQuery控制台运行上面的查询,等结果加载完成
  2. 点击结果面板右上角的**「导出」**按钮
  3. 选择**「CSV」**格式,设置好存储路径(比如Google Cloud Storage或者直接下载到本地),确认导出就行

这个查询会自动从你的包第一次有下载记录的日期开始,每30天作为一个周期统计下载量,输出的date列就是每个周期的起始日期,格式和你要的dd-mm-yyyy完全一致。

内容的提问来源于stack exchange,提问作者CiaranWelsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:04