post Image
Github on BigQueryを使ってgoでよく使われるpackageを調べる

Github on BigQueryとは

Google Cloud Platform Blog: GitHub on BigQuery: Analyze all the open source code
にあるように、Githubにある全てのオープンなソースコードに対してBigQueryからクエリがかけられます。すごい。

Goで使われているpackageを調べる

以下にあるサンプルに、よく使われるgoのpackageを調べるクエリが載っている。

GitHub Data  |  BigQuery  |  Google Cloud Platform

例ではTop10だが、30にしてやってみた。

以下のクエリ例では sample_xxxというデータを間引いた小さなテーブルを参照してますが、結果は sample_を取り除いたテーブルに対して実行しています。

クエリ

SELECT
  REGEXP_EXTRACT(line, r'"([^"]+)"') AS url,
  COUNT(*) AS count
FROM
  FLATTEN( (
    SELECT
      SPLIT(SPLIT(REGEXP_EXTRACT(content, r'.*import\s*[(]([^)]*)[)]'), '\n'), ';') AS line,
    FROM (
      SELECT
        id,
        content
      FROM
        [bigquery-public-data:github_repos.sample_contents]
      WHERE
        REGEXP_MATCH(content, r'.*import\s*[(][^)]*[)]')) AS C
    JOIN (
      SELECT
        id
      FROM
        [bigquery-public-data:github_repos.sample_files]
      WHERE
        path LIKE '%.go'
      GROUP BY
        id) AS F
    ON
      C.id = F.id), line)
GROUP BY
  url
HAVING
  url IS NOT NULL
ORDER BY
  count DESC
LIMIT 30

結果

url count
1 fmt 692434
2 time 390527
3 strings 364287
4 testing 311692
5 os 311061
6 net/http 224422
7 io 193310
8 bytes 191048
9 errors 183711
10 io/ioutil 173026
11 encoding/json 163164
12 strconv 162616
13 log 141918
14 sync 135247
15 reflect 115058
16 path/filepath 107154
17 net 96514
18 net/url 79102
19 sort 67765
20 context 59503
21 golang.org/x/net/context 59146
22 flag 59020
23 runtime 58575
24 regexp 58526
25 k8s.io/kubernetes/pkg/api 52827
26 path 52798
27 github.com/golang/glog 52015
28 k8s.io/apimachinery/pkg/apis/meta/v1 49840
29 math 47452
30 bufio 45251

上位は基本的に標準packageが多いです。
次に、標準packageでないものを調べたかったのでimportにURLが含まれるものを調べてみました。

クエリ

SELECT
  REGEXP_EXTRACT(line, r'"([^\.]+\.[^"]+)"') AS url,
  COUNT(*) AS count
FROM
  FLATTEN( (
    SELECT
      SPLIT(SPLIT(REGEXP_EXTRACT(content, r'.*import\s*[(]([^)]*)[)]'), '\n'), ';') AS line,
    FROM (
      SELECT
        id,
        content
      FROM
        [bigquery-public-data:github_repos.sample_contents]
      WHERE
        REGEXP_MATCH(content, r'.*import\s*[(][^)]*[)]')) AS C
    JOIN (
      SELECT
        id
      FROM
        [bigquery-public-data:github_repos.sample_files]
      WHERE
        path LIKE '%.go'
      GROUP BY
        id) AS F
    ON
      C.id = F.id), line)
GROUP BY
  url
HAVING
  url IS NOT NULL
ORDER BY
  count DESC
LIMIT 30

結果

url count
1 golang.org/x/net/context 59146
2 k8s.io/kubernetes/pkg/api 52827
3 github.com/golang/glog 52015
4 k8s.io/apimachinery/pkg/apis/meta/v1 49840
5 github.com/stretchr/testify/assert 42613
6 github.com/onsi/ginkgo 34234
7 github.com/onsi/gomega 34054
8 github.com/spf13/cobra 31093
9 github.com/Sirupsen/logrus 28731
10 k8s.io/apimachinery/pkg/runtime 28554
11 gopkg.in/check.v1 22537
12 github.com/pkg/errors 22353
13 k8s.io/api/core/v1 20038
14 github.com/juju/errors 18756
15 github.com/aws/aws-sdk-go/aws 17602
16 k8s.io/kubernetes/pkg/runtime 17278
17 k8s.io/kubernetes/pkg/api/v1 15727
18 k8s.io/apimachinery/pkg/types 15658
19 github.com/sirupsen/logrus 15291
20 k8s.io/kubernetes/pkg/api/unversioned 15111
21 k8s.io/apimachinery/pkg/runtime/schema 15102
22 k8s.io/apimachinery/pkg/api/errors 14614
23 google.golang.org/grpc 14068
24 github.com/Azure/go-autorest/autorest 13074
25 k8s.io/apimachinery/pkg/labels 13049
26 github.com/stretchr/testify/require 13042
27 k8s.io/apimachinery/pkg/watch 12363
28 k8s.io/client-go/rest 11300
29 github.com/Azure/go-autorest/autorest/azure 11263
30 github.com/juju/testing/checkers 10800

ログとかテスト系が多い中に、kubernetes関係がちょこちょこ入ってきてる。

以上は2018/8/23に更新しました。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。