首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以编写一个BigQuery来检索随时间推移的PyPI下载的二进制计数?

是否可以编写一个BigQuery来检索随时间推移的PyPI下载的二进制计数?
EN

Stack Overflow用户
提问于 2018-05-30 09:29:07
回答 1查看 274关注 0票数 4

下面的代码是对谷歌BigQuery的SQL查询,它计算了我的PyPI包在过去30天内下载的次数。

代码语言:javascript
代码运行次数:0
运行
复制
#standardSQL
SELECT COUNT(*) AS num_downloads
FROM `the-psf.pypi.downloads*`
WHERE file.project = 'pycotools'
  -- Only query the last 30 days of history
  AND _TABLE_SUFFIX
    BETWEEN FORMAT_DATE(
      '%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
    AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())

是否有可能修改这个查询,使我获得自软件包上传后每30天下载一次的次数?输出将是一个类似于以下内容的.csv

代码语言:javascript
代码运行次数:0
运行
复制
date          count
01-01-2016    10
01-02-2016    20
    ..        ..
01-05-2018    100
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-10 22:26:13

我建议使用提取或月份(),并且只计算file.project字段,因为它将使查询运行得更快。您可以使用的查询是:

代码语言:javascript
代码运行次数:0
运行
复制
#standardSQL
SELECT
  EXTRACT(MONTH FROM _PARTITIONDATE) AS month_, 
  EXTRACT(YEAR FROM _PARTITIONDATE) AS year_,
  count(file.project) as count
FROM
  `the-psf.pypi.downloads*`
WHERE
  file.project= 'pycotools'
    GROUP BY 1, 2
    ORDER by 1 ASC

我在公共数据集上尝试过:

代码语言:javascript
代码运行次数:0
运行
复制
#standardSQL
SELECT
  EXTRACT(MONTH FROM pickup_datetime) AS month_, 
  EXTRACT(YEAR FROM pickup_datetime) AS year_,
  count(rate_code) as count
FROM
  `nyc-tlc.green.trips_2015`
WHERE
  rate_code=5
GROUP BY 1, 2
ORDER by 1 ASC

或者使用遗产

代码语言:javascript
代码运行次数:0
运行
复制
SELECT
  MONTH(pickup_datetime) AS month_, 
  YEAR(pickup_datetime) AS year_,
  count(rate_code) as count
FROM
  [nyc-tlc:green.trips_2015]
  WHERE
  rate_code=5
  GROUP BY 1, 2
  ORDER by 1 ASC

结果是:

代码语言:javascript
代码运行次数:0
运行
复制
month_  year_   count    
1       2015    34228    
2       2015    36366    
3       2015    42221    
4       2015    41159    
5       2015    41934    
6       2015    39506        

我看到您使用的是_TABLE_SUFFIX,所以如果您正在查询分区表,您可以使用帕蒂列而不是格式化日期和使用date_sub函数。这也将使用更少的计算时间。

一个分区查询

代码语言:javascript
代码运行次数:0
运行
复制
SELECT
  [COLUMN]
FROM
  [DATASET].[TABLE]
WHERE
  _PARTITIONDATE BETWEEN '2016-01-01'
  AND '2016-01-02'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50601114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档