2016-03-09 2 views
1

Я пытаюсь соединить все таблицы comment (осколки комментариев каждый месяц) до таблицы posts. Есть ли способ для меня выполнить союз до внутреннего соединения? Подробности о объединении всего оператора можно найти в документации here. Мой запрос лишь 1 из таблицы комментариев выглядит следующим образом:Как использовать объединение BigQuery с внутренним соединением?

SELECT c.score, c.body, c.link_id, c.parent_id, p.created_utc, c.created_utc 
FROM [fh-bigquery:reddit_comments.2016_01] AS c 
INNER JOIN [fh-bigquery:reddit_posts.full_corpus_201512] AS p 
ON c.parent_id = p.name 
WHERE SUBSTR(c.parent_id, 1, 2) = 't3' 
ORDER BY c.score DESC 
LIMIT 10 
+0

Важно на SO - вы можете «пометить принятый ответ», используя отметку слева от опубликованного ответа под голосом. См. Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235, почему это важно! Также хорошей практикой является «голосовать за ответ». Голосовые ответы полезны. Есть еще ... Вы можете проверить, что делать, когда кто-то отвечает на ваш вопрос - http://stackoverflow.com/help/someone-answers. –

ответ

1

Как Михаил Берли Антон указал в своем ответе, изменив запрос как таковой, выполнив то, что мне нужно.

SELECT c.score, c.body, c.link_id, c.parent_id, p.created_utc, c.created_utc, (c.created_utc - p.created_utc) AS time_diff 
FROM (
    SELECT * 
    FROM 
    [fh-bigquery:reddit_comments.2015_11], 
    [fh-bigquery:reddit_comments.2015_12], 
    [fh-bigquery:reddit_comments.2016_01], 
) AS c 
INNER JOIN [fh-bigquery:reddit_posts.full_corpus_201512] AS p 
ON c.parent_id = p.name 
WHERE SUBSTR(c.parent_id, 1, 2) = 't3' 
ORDER BY c.score DESC 
LIMIT 100 
+0

предложение: никогда не используйте 'SELECT *' в BigQuery, поскольку вы, скорее всего, будете перевыполнены. Используйте только те поля, которые вам действительно нужны, поэтому вы будете платить только за те поля vs для всей таблицы, как при использовании * –

+1

Этот конкретный 'SELECT *' в порядке. Вам не будут взиматься плата за поля, которые не доходят до внешнего 'SELECT'. –

1

Заменить

FROM [fh-bigquery:reddit_comments.2016_01] AS c 

с

FROM (
    SELECT score, body, link_id, parent_id, created_utc 
    FROM (TABLE_QUERY([fh-bigquery:reddit_comments], 
        'REGEXP_MATCH(table_id, r"\d{4}_\d{2}")')) 
) AS c 

Надежда, это дает вам представление
Посмотреть больше Table wildcard functions и Regular expression functions

Смежные вопросы