2017-02-15 11 views
0

Моя цель состоит в том, чтобы присоединиться к sample_contents с sample_commits по repo_nameПрисоединение 02 столов по BigQuery с GitHub набора данных

1) Во-первых, я присоединился к sample_contents с files, так что он теперь содержит repo_name

SELECT line,a.id,sample_path,sample_repo_name,repo_name 
FROM (
    SELECT * FROM (
     SELECT (SPLIT(content, '\n')) line , a.id,sample_path,sample_repo_name,repo_name 
      FROM (
       (SELECT * FROM [bigquery-public-data:github_repos.sample_contents] WHERE sample_path LIKE '%.java')    
       ) a JOIN (SELECT * FROM [bigquery-public-data:github_repos.files]) b ON a.id=b.id 
     ) WHERE REGEXP_MATCH(line, '^String|^private int|^public|[.]') 
) 

2) Теперь, Я сделал следующее query, ожидая получить все фиксации для любых данных файлов на repo_name:

SELECT (CASE WHEN line CONTAINS 'String' THEN 'String' ELSE '' END) AS column_1, 
(CASE WHEN line CONTAINS 'public' THEN 'public' ELSE '' END) AS column_2,line,a.id,sample_path,sample_repo_name,X.repo_name 
FROM (
    SELECT * FROM (
     SELECT (SPLIT(content, '\n')) line , a.id,sample_path,sample_repo_name,repo_name 
      FROM (
       (SELECT * FROM [bigquery-public-data:github_repos.sample_contents] WHERE sample_path LIKE '%.java')    
       ) a JOIN (SELECT * FROM [bigquery-public-data:github_repos.files]) b ON a.id=b.id 
     ) WHERE REGEXP_MATCH(line, '^String|^private int|^public|[.]') 
) 
    X JOIN (SELECT * FROM [bigquery-public-data:github_repos.sample_commits]) Y ON X.repo_name=Y.repo_name LIMIT 100 

enter image description here Но оно возвращает 0 результат! Не могли бы вы помочь мне разобраться в этой проблеме?

Спасибо,

+0

Я получаю немного потерял. .. Какова конечная цель этих запросов? –

+0

Отслеживать «состояние» каждого java-кода за каждый репо за фиксацию –

+0

'state'? не уверен еще ... –

ответ

0

Я не уверен, что вы пытаетесь сделать здесь, но хорошее место, чтобы проверить, есть вкладка «Объяснение».

enter image description here

Обратите внимание, что на начальных этапах запрос является обработка ~ 2 миллиардов строк в стадии 2 и ~ 1,7 млрд строк в стадии 7. Каким-то образом, что переводится до 10 миллиардов строк в стадии 37 (или взрыва РЕГИСТРИРУЙТЕСЬ ТРЕЩИНА()?).

Посмотрите на то, что происходит на сцене 37 ... потому что ни одна строка от 10 миллиарда человек не проходит фильтры (либо WHERE или эквисоединениями):

enter image description here