代码之家  ›  专栏  ›  技术社区  ›  caarlos0

BigQuery GitHub数据集返回错误的结果

  •  2
  • caarlos0  · 技术社区  · 6 年前

    所以,我想用 bigquery-public-data:github_repos.files ,更新日期为 May 25, 2018, 2:07:03 AM 理论上,它包含来自Github的所有文件数据——正如表描述中所述:

    头上所有文件的文件元数据。

    在ID列上与[BigQuery公共数据:GitHub回购.Contents]联接 搜索文本。

    所以,我有一个叫做goreleaser的工具,要使用它,用户可以创建一个名为.goreleaser.yaml的文件。为了了解有多少存储库在使用它,我使用了Github搜索,类似这样的搜索 filename:goreleaser extension:yaml extension:yml path:/ ,您可以在此链接上看到结果。

    这将显示1K+个结果,并获取所有这些可能名称的结果:

    • goreleaser.yml
    • goreleaser.yaml
    • .goreleaser.yml
    • .goreleaser.yaml

    问题是,Github显示1K结果计数,但只能分页到1K左右。我在Go中使用API等编写了一些代码,您可以在这里看到。

    不管怎样,我试着用bigquery做类似的事情,这是我的愚蠢尝试:

    SELECT repo_name, path
    FROM [bigquery-public-data:github_repos.files]
    WHERE REGEXP_MATCH(path, r'\.?goreleaser.ya?ml')
    

    这将包括自动售卖的工具,这是不好的,但这不是问题。问题是,即使使用自动售货工具,它也只显示大约500个结果,而不是1K。

    PS:我也试过简化版的匹配 path 具有 LIKE 等等,同样的结果。

    所以,要么我做了严重错误的事情,这个表并没有像它所说的那样包含所有数据,要么Github搜索对我撒谎。

    有什么建议吗?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  3
  •   Felipe Hoffa    6 年前

    不是GitHub中的每个项目都在BigQuery的repo数据集上镜像。

    让我们看看4月份所有超过40颗星的项目,以及我们可以在BigQuery的回购协议中找到的镜像项目:

    SELECT COUNT(name) april_projects_gt_stars, COUNT(repo_name) projects_mirrored
    FROM (
      SELECT DISTINCT repo_name, name, c
      FROM `bigquery-public-data.github_repos.files` a
      RIGHT JOIN (
        SELECT repo.name, COUNT(*) c
        FROM `githubarchive.month.201804` 
        WHERE type='WatchEvent'
        GROUP BY 1
        HAVING c>40
      ) b
      ON repo_name=name
    )
    

    enter image description here

    9522对3995。为什么?

    • 只镜像开放源代码项目。这是根据开源检测到的许可证——如果Github无法分辨项目使用的许可证,则无法镜像项目。
    • 新项目:管道可能会错过一些新项目。请报告。