我想使用以下命令获取GutHub上所有唯一存储库的列表:
SELECT DISTINCT repo_name FROM `bigquery-public-data.github_repos.commits`
但是我遇到以下错误:
ARRAY类型的列repo_name不能在[1:17]的SELECT DISTINCT中使用
在架构中,它说repo_name是STRING类型,我在做什么错了?
我想使用以下命令获取GutHub上所有唯一存储库的列表:
SELECT DISTINCT repo_name FROM `bigquery-public-data.github_repos.commits`
但是我遇到以下错误:
ARRAY类型的列repo_name不能在[1:17]的SELECT DISTINCT中使用
在架构中,它说repo_name是STRING类型,我在做什么错了?
repo_name在表模式中被定义为模式为“重复”的“字符串”,这在BigQuery中大致表示STRING的数组。
https://cloud.google.com/bigquery/docs/nested-repeated
What does REPEATED field in Google Bigquery mean?
,您可以使用以下查询
SELECT
commit,repo_name
FROM
`bigquery-public-data.github_repos.commits`,UNNEST(repo_name) as repo_name
WHERE
commit = 'c87298e36356ac19519a93dee3dfac8ebffe45e8'
将给出如下结果
Row | commit | repo_name
===================================================================
1 | c87298e36356ac19519a93dee3dfac8ebffe45e8 | noondaysun/sakai
2 | c87298e36356ac19519a93dee3dfac8ebffe45e8 | OpenCollabZA/sakai
,
正如另一位用户所发布的,在bigquery-public-data.github_repos.commits
表的架构中,您可以看到repo_name
字段被定义为STRING REPEATED,这意味着repo_name
的每个条目是由字符串型元素组成的数组。您可以通过以下查询看到它:
#standardSQL
SELECT repo_name
FROM `bigquery-public-data.github_repos.commits`
LIMIT 100;
为了找到不同的仓库名称,您可以使用UNNEST
运算符来扩展repo_name
元素中的每个元素。以下查询执行CROSS JOIN,将一个新字段repo_name_single
添加到由各个存储库名称组成的表中。这样,可以使用DISTINCT
函数。
#standardSQL
SELECT DISTINCT(repo_name_unnest)
FROM `bigquery-public-data.github_repos.commits`
CROSS JOIN UNNEST(repo_name) AS repo_name_unnest;