【问题标题】:adding all columns from mutiple tables从多个表中添加所有列
【发布时间】:2020-06-29 02:15:04
【问题描述】:

我有一个简单的问题。

我需要用日期和时间计算多个表中的所有记录,并将所有记录加到一个最终表中。

所以每个选项卡的查询是这样的

select timestamp_trunc(timestamp,day) 日期,timestamp_trunc(timestamp,hour) 小时,count(*) from table_1

select timestamp_trunc(timestamp,day) 日期,timestamp_trunc(timestamp,hour) 小时,count(*) from table_2

select timestamp_trunc(timestamp,day) 日期,timestamp_trunc(timestamp,hour) 小时,count(*) from table_3

以此类推

我想将这些表中显示每天和每小时的总记录数的所有结果结合起来。

预期的结果会是这样的

日期、小时、表一的记录数、表二的记录数、表三的记录数…………

对此最优化的 SQL 查询是什么?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    可能最简单的方法就是将union它们放在一起并聚合:

    select timestamp_trunc(timestamp, hour) as hh,
           countif(which = 1) as num_1,
           countif(which = 2) as num_2
    from ((select timestamp, 1 as which
           from table_1
          ) union all
          (select timestamp, 2 as which
           from table_2
          ) union all
          . . .
         ) t
    group hh
    order by hh;
    

    您正在使用timestamp_trunc()。它返回截断为小时的时间戳 - 无需同时包含日期。

    【讨论】:

      【解决方案2】:

      以下是 BigQuery 标准 SQL

      #standardSQL
      SELECT 
        TIMESTAMP_TRUNC(TIMESTAMP, DAY) day, 
        EXTRACT(HOUR FROM TIMESTAMP) hour, 
        COUNT(*) cnt,
        _TABLE_SUFFIX AS table
      FROM `project.dataset.table_*`
      GROUP BY day, hour, table
      

      【讨论】:

      • 我认为这是一个很好的解决方案,但前提是数据集下的表彼此非常兼容并且我们想要选择该数据集中的所有表。就我而言,其中一些不兼容,例如不同的分区,我只想选择一些表,而不是数据集下的整个表。任何替代解决方案?通配符匹配不兼容的分区表,第一个表table 1,第一个不兼容的表table2。
      • 仍然应该为您工作 - 您可以添加像 `WHERE _TABLE_SUFFIX IN ('aaa', 'bbb' ...) 这样的子句,以便您可以自定义要从中收集数据的确切表列表
      • 我希望这会顺利进行,但显然我偶然发现了另一个问题。我使用了数据集中表的前缀,例如 site_* 并添加了子句 WHERE _TABLE_SUFFIX IN ('ac_newyork', 'ac_Houston, bb_Dallas, bb_Chicago, ...') 但仍然收到消息:通配符匹配不兼容的分区表,第一个aa_newyork,第一个不兼容的表bb_LA。有什么出路吗?我喜欢这个解决方案,因为它比@Gordon 提供的解决方案更简单
      • 看起来它首先扫描了该数据集中的所有表,并在选择要计算的表之前检查它们是否都具有相同的分区。
      猜你喜欢
      • 1970-01-01
      • 2021-12-13
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多