Ответ 1
Один SQL-запрос может ссылаться на несколько таблиц. Просто отделите каждую таблицу запятой в предложении FROM, чтобы запросить все упомянутые таблицы.
Так как невозможно обновить данные в таблице в BigQuery и поддерживает только механизм добавления, я решил ежемесячно создавать новые таблицы. Предположим, что в 2012 году таблицы будут (tbl_012012
, tbl_022012
, tbl_032012
,... tbl_122012
). Каждая запись будет сохранена вместе с датой timestamp
как строка.
Теперь, если мое приложение хочет получать записи, начиная с января 2012 года (tbl_012012
) до марта 2012 года (tbl_032012
), BigQuery API автоматически пройдет через нужные таблицы с помощью запроса на один SQL-диапазон или мне придется писать несколько SQL-запросов с дополнительным кодом приложения для извлечения каждого результата запроса и их суммирования в целом?
Один SQL-запрос может ссылаться на несколько таблиц. Просто отделите каждую таблицу запятой в предложении FROM, чтобы запросить все упомянутые таблицы.
Вы также можете использовать функцию подстановочного стола. Здесь один пример из docs для StandardSQL:
SELECT
name
FROM
mydata.people
WHERE
age >= 35
AND
(_TABLE_SUFFIX BETWEEN '20140325' AND '20140327')
И вот аналогичный пример для LegacySQL (docs).
SELECT
name
FROM
(TABLE_DATE_RANGE([mydata.people],
TIMESTAMP('2014-03-25'),
TIMESTAMP('2014-03-27')))
WHERE
age >= 35
Это запросит таблицы:
На docs имеется еще несколько опций. Я бы рекомендовал проверить их.
Вот фрагмент, демонстрирующий пример множественного выбора таблицы:
SELECT trafficSource.medium AS Traffic_Source, COUNT(trafficSource.medium) AS Counts_Source
FROM [608XXXXX.ga_sessions_20131008],
[608XXXXX.ga_sessions_20131009],
[608XXXXX.ga_sessions_20131010],
[608XXXXX.ga_sessions_20131011],
[608XXXXX.ga_sessions_20131012],
[608XXXXX.ga_sessions_20131013],
[608XXXXX.ga_sessions_20131014],
[608XXXXX.ga_sessions_20131015],
GROUP BY Traffic_Source
ORDER BY Counts_Source DESC
2017 обновление:
С BigQuery #standardSQL вы можете использовать стандартный UNION ALL
для перехода через несколько таблиц, или вы можете использовать *
для соответствия всем таблицам, которые используют один и тот же префикс. При использовании сочетания *
у вас также будет доступ к мета-столбцу _TABLE_SUFFIX
, чтобы узнать, из какой таблицы были получены строки.
SELECT * FROM Roster
UNION ALL
SELECT * FROM TeamMascot