ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-是否可以编写BigQuery来检索PyPI下载随时间推移的分箱计数?

2019-11-09 00:57:45  阅读:285  来源: 互联网

标签:google-bigquery pypi python sql


以下代码是针对Google的BigQuery的SQL查询,该查询计算最近30天内我的PyPI软件包已下载的次数.

#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:

date          count
01-01-2016    10
01-02-2016    20
    ..        ..
01-05-2018    100

解决方法:

我建议使用EXTRACT或MONTH()并仅计算file.project字段,因为它将使查询运行更快.您可以使用的查询是:

#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

我尝试使用公共数据集:

#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

或使用旧版

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

结果是:

month_  year_   count    
1       2015    34228    
2       2015    36366    
3       2015    42221    
4       2015    41159    
5       2015    41934    
6       2015    39506        

我看到您正在使用_TABLE_SUFFIX,因此,如果要查询分区表,则可以使用_PARTITIONDATE列而不是格式化日期和使用date_sub函数.这也将减少计算时间.

要从one partition查询:

SELECT
  [COLUMN]
FROM
  [DATASET].[TABLE]
WHERE
  _PARTITIONDATE BETWEEN '2016-01-01'
  AND '2016-01-02'

标签:google-bigquery,pypi,python,sql
来源: https://codeday.me/bug/20191109/2010685.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有