查询多个表

时间:2016-06-20 17:50:57

标签: google-bigquery

我正在尝试创建一个查询来从BQ中的两个不同的表中提取数据。它们都包含相同的模式。是否有可能在BQ中做这样的事情?

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

请告诉我。 感谢

3 个答案:

答案 0 :(得分:1)

您可以使用标准SQL中的_TABLE_SUFFIX伪列来执行此操作。

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())

在Legacy 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'))

答案 1 :(得分: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'))
  

已添加以解决最新评论:

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

答案 2 :(得分:0)

对于Legacy SQL,使用逗号作为union运算符来联合两个单独的TABLE_DATE_RANGE,如下所示:

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'))