2016-06-20 4 views
1

Я пытаюсь создать запрос для извлечения данных из двух разных таблиц в BQ. Оба они содержат одну и ту же схему. Можно ли сделать что-то подобное в BQ?Запрос на несколько таблиц

FROM (TABLE_DATE_RANGE([567.ga_sessions_],[1234.ga_sessions_],DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))) 

Пожалуйста, дайте мне знать. Thanks

ответ

1

Table wildcard functions являются удобным способом в BigQuery Legacy SQL для запроса данных из определенного набора таблиц.
Specific Set здесь фактически Dataset.
Итак, если ваши таблицы распределены по различным наборам данных, вам понадобятся UNION ALL подмножества, принадлежащие разным наборам данных.
В вашем случае это будет объединение двух множеств:

SELECT <fields> 
FROM 
    TABLE_DATE_RANGE([567.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')), 
    TABLE_DATE_RANGE([1234.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')) 

added to address latest comment:

SELECT 
    Domains, 
    DATE, 
    EXACT_COUNT_DISTINCT(fullvisitorid) AS UniqueCustomers, 
FROM (
    SELECT 
    *, 
    "SiteA" AS Domains, 
    FROM 
    TABLE_DATE_RANGE([12342.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))), 
(
    SELECT 
    *, 
    "SiteB" AS Domains, 
    FROM 
    TABLE_DATE_RANGE([12311.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))), 
GROUP BY 
    DATE, 
    Domains 
+0

Имеет ли смысл запрос ниже? SELECT Date, EXACT_COUNT_DISTINCT (fullvisitorid) AS UniqueCustomers, FROM (SELECT *, "SiteA" AS Домены, FROM TABLE_DATE_RANGE ([12342.ga_sessions_], DATE_ADD (CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD (CURRENT_TIMESTAMP (), FROM (SELECT *, «SiteB» AS Domains, FROM TABLE_DATE_RANGE ([12311.ga_sessions_], DATE_ADD (CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD (CURRENT_TIMESTAMP (), -1, 'DAY'))), GROUP BY Date, Domains – sam123

+0

нет, это не так. вы должны удалить третью (считая сверху) FROM –

+0

Но я пытаюсь сгруппировать свои данные по доменам, мне нужно будет иметь предложение FROM 4 раза в этом утверждении нет? – sam123

1

Вы можете сделать это, используя псевдо-столбец _TABLE_SUFFIX в стандартном SQL.

SELECT ... 
FROM `myproject.567.ga_sessions_*` 
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE("%Y%m%d", DATE_ADD(CURRENT_DATE(), INTERVAL -2 DAY)) AND FORMAT_DATE("%Y%m%d", CURRENT_DATE()) 
UNION ALL 
SELECT ... 
FROM `myproject.1234.ga_sessions_*` 
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE("%Y%m%d", DATE_ADD(CURRENT_DATE(), INTERVAL -2 DAY)) AND FORMAT_DATE("%Y%m%d", CURRENT_DATE()) 

В Наследства SQL, что-то вроде этого:

SELECT 
    <desired fields> 
FROM 
    TABLE_DATE_RANGE([myproject.1234], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')), 
    TABLE_DATE_RANGE([myproject.567], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')) 
+0

Ошибка: Ошибка синтаксиса: Неожиданный "" в [1: 8] – sam123

+0

Я использовал ... так как я не знаю схему таблицы. Можете ли вы попробовать с фактическим списком желаемых полей? –

+0

Есть ли способ сделать это с помощью Legacy SQL? – sam123

0

для унаследованных SQL, используйте запятую в качестве оператора профсоюзного объединения двух отдельных TABLE_DATE_RANGEs, например, так:

FROM 
    TABLE_DATE_RANGE([1234.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')), 
    TABLE_DATE_RANGE([567.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')) 
Смежные вопросы