从bigquery-public-data获取特定文件的内容数据:github_repos与JOIN和WHERE不同的结果

时间:2018-02-05 10:51:50

标签: sql github google-bigquery

按名称从特定文件bigquery-public-data:github_repos获取内容数据的最常用方法如下:

SELECT *
FROM [bigquery-public-data:github_repos.sample_contents]
WHERE id IN (SELECT id FROM (
  SELECT *
  FROM [bigquery-public-data:github_repos.sample_files]
  WHERE path = 'README.md'
))

此查询为我提供 14557 结果。

我认为在查询下运行会给我相同的结果:

SELECT contents.*
FROM [bigquery-public-data:github_repos.sample_contents] contents
INNER JOIN [bigquery-public-data:github_repos.sample_files] files
  ON contents.id = files.id 
WHERE files.path = 'README.md'

但结果是 14645 结果。

为什么这两个结果之间存在差异,而且选择README.md文件的内容数据是正确的?

编辑:

看起来没有修改的分叉文件在其他repos(forks)中具有相同的id。

1 个答案:

答案 0 :(得分:1)

首次查询为您提供包含路径=' README.md'无论文件表中存在多少次文件ID

由于JOIN

,第二个查询为文件表中的相应文件提供了相同的内容

您可以在下方运行以验证此

SELECT EXACT_COUNT_DISTINCT(contents.id)
FROM [bigquery-public-data:github_repos.sample_contents] contents
INNER JOIN [bigquery-public-data:github_repos.sample_files] files
  ON contents.id = files.id 
WHERE files.path = 'README.md'