我正在尝试使用Google BigQuery中的公共数据集随时间推送有关GitHub每月提交的数据。以下查询为Chef和Ansible提供了结果,但没有为Puppet或Salt返回任何内容。
SELECT
MONTH(committer.date) month,
YEAR(committer.date) year,
repo_name,
COUNT(*) commits,
FROM
[bigquery-public-data:github_repos.commits]
WHERE
repo_name IN ('puppetlabs/puppet',
'saltstack/salt',
'ansible/ansible',
'chef/chef')
GROUP BY
month,
year,
repo_name
然后我尝试通过修改WHERE子句来修改查询以仅拉取Salt或Puppet:
WHERE
repo_name = 'puppetlabs/puppet'
(我也用'saltstack / salt'作为一个单独的查询重复了这个。)在每种情况下我收到了错误消息:
'查询返回零记录。'
我试图通过以下方式进行故障排除:
1)确认我使用的是正确的回购品名称
2)确认回购是公开的,并且(理论上)应该包含在BigQuery数据中
3)我已将Ansible和Chef的查询结果绑定到github.com上的提交,并且在这些情况下的查询给出了准确的结果。
有没有人对问题所在以及如何修改我的查询以返回Salt和Puppet的数据有任何想法?
答案 0 :(得分:1)
puppetlabs/puppet
不是开源的,至少由GitHub的许可证API决定:
curl -H "Accept: application/vnd.github.drax-preview+json" \
https://api.github.com/repos/puppetlabs/puppet |grep license -A 6
"license": {
"key": "other",
"name": "Other",
"spdx_id": null,
"url": null,
"featured": false
},
API的文档:
puppetlabs/puppet
许可证:
对我来说,它看起来像是Apache License 2.0,但在GitHub License API确定这实际上是开源许可证之前,它不会包含在GitHub BigQuery存储库中。
请注意,GitHub使用licensee来支持他们的API,这就是他们说算法运行的方式:
如果许可证文件有明确的版权声明,则仅此而已 (例如,版权所有(c)2015 Ben Balter),我们将假设作者有意 保留所有权利,因此该项目未获得许可。
如果 许可证与已知许可证完全匹配。如果我们脱光了 空白和版权声明,我们可能会幸运,并直接串 Ruby中的比较便宜。
如果我们仍然无法匹配许可证,我们 使用一种名为Sørensen-Dice系数的奇特数学事物,即 非常善于计算两个字符串之间的相似性。通过 计算从已知许可证到许可证的百分比变化 例如,您可以告诉某个给定的许可证与该文件的90%相似 MIT许可证,10%可能代表版权线 适应项目。
现在,如果您尝试获取他们的提交信息,您可以使用GitHub Archive BigQuery数据集:
SELECT type, COUNT(*) c
FROM [githubarchive:month.201607]
WHERE repo.name = 'puppetlabs/puppet'
AND type='PushEvent'
GROUP BY 1
答案 1 :(得分:0)
在下面运行以查看来自puppetlabs的所有内容,例如
SELECT repo_name, COUNT(1) commits
FROM [bigquery-public-data:github_repos.commits]
WHERE repo_name LIKE 'puppetlabs/%'
GROUP BY repo_name
ORDER BY commits DESC
有很多人!