2016-04-05 16 views
1

Google BigQueryを使用してgithubアーカイブから共同作業者のログイン、リポジトリ言語、名前をクエリしようとしています。次のクエリは、GROUP BYを除外してもうまく動作しますが、GROUP BYを使用すると、グーグルのbigqueryからタイムアウトするまで、クエリは永遠に続きます。 Google BigQueryにはDISTINCTがないので、私はDISTINCTとしてGROUP BYを使用して、繰り返しの行を取得しないようにしています。ここで私が使用しているクエリは:Google BigQuery GROUP BYタイムアウト

SELECT 
    a1.actor_attributes_login, 
    a2.actor_attributes_login, 
    a1.repository_language, 
    a1.repository_name, 
FROM 
    [githubarchive:year.2014] AS a1 
LEFT JOIN 
    [githubarchive:year.2014] AS a2 
ON 
    a1.repository_name = a2.repository_name 
WHERE 
    a1.actor_attributes_login != a2.actor_attributes_login 
    AND a1.actor_attributes_location = "California" 
    AND (a1.repository_language = "Java" 
     OR a1.repository_language = "Python") 
GROUP BY 
    a1.actor_attributes_login, 
    a2.actor_attributes_login, 
    a1.repository_language, 
    a1.repository_name 
LIMIT 
    10000 

答えて

1

Hmmmです。ジョインやっ前重複を削除してみてください:

SELECT a1.actor_attributes_login, a2.actor_attributes_login, 
     a1.repository_language, a1.repository_name 
FROM (SELECT a.actor_attributes_login, a.repository_language, a1.repository_name 
     FROM githubarchive:year.2014] a 
     WHERE a.actor_attributes_location = 'California AND 
      a.repository_language IN ('Java', 'Python') 
     GROUP BY a.actor_attributes_login, a.repository_language, a.repository_name 
    ) a1 LEFT JOIN 
    (SELECT a1.actor_attributes_login, a1.repository_language, a1.repository_name 
     FROM githubarchive:year.2014] a1 
     GROUP BY a1.actor_attributes_login, a1.repository_language, a1.repository_name 
    ) a2 
    ON a1.repository_name = a2.repository_name 
WHERE a1.actor_attributes_login <> a2.actor_attributes_login 
LIMIT 10000; 

は、私はあなたがサブクエリで重複を排除する場合は、外GROUP BYを必要としないと思います。

また、LIMITを使用している場合は、ORDER BYが必要です。

+0

ああ伝説!最初のインナーセレクトの名前をa1に変更する必要がありました。これはこのテーブルで2つのテーブルに使用されているため、曖昧であるが偉大なこと以外は却下されます。ありがとう! –