BigQuery - 跨多个表读取时选择分区键

Posted

技术标签:

【中文标题】BigQuery - 跨多个表读取时选择分区键【英文标题】:BigQuery - Select partition key when reading across several tables 【发布时间】:2018-05-31 02:25:19 【问题描述】:

我的表是按天分区的,比如table_20180501table_20180502、... 它们没有日期列,因为它隐含在分区中。我想在多个表中进行选择并在我的选择中获取日期。

类似

SELECT
    _TABLE_SUFFIX as date,
    *
FROM (TABLE_DATE_RANGE(
    [table_],
    TIMESTAMP(DATE_ADD(TIMESTAMP(CONCAT(CURRENT_DATE(), ' 00:00:00')), -39, 'DAY')),
    TIMESTAMP(DATE_ADD(DATE_ADD(DATE_ADD(TIMESTAMP(CONCAT(CURRENT_DATE(), ' 00:00:00')), -39, 'DAY'), 40, 'DAY'),-1, 'SECOND'))
))

那行不通 (Field '_TABLE_SUFFIX' not found)

【问题讨论】:

您是否尝试过将通配符表与标准 SQL 一起使用? *** 上应该已经有很多例子了。 【参考方案1】:

以下是 BigQuery 标准 SQL 的示例

#standardSQL
SELECT
  _TABLE_SUFFIX AS dt,
  COUNT(1) cnt
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN '20170718' AND '20170719'
GROUP BY dt   


#standardSQL
SELECT
  _TABLE_SUFFIX AS dt,
  COUNT(1) cnt
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 318 DAY)) 
  AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 317 DAY))
GROUP BY dt  

两个例子都会返回类似

Row dt          cnt  
1   20170717    2923     
2   20170718    3072     

希望这能给你正确的方向

【讨论】:

谢谢!我正在使用 Looker,但我认为我无法控制日期范围查询的格式,但我想这很具体

以上是关于BigQuery - 跨多个表读取时选择分区键的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery BI 引擎是不是适用于分区表

为啥 BigQuery BI 引擎不使用所有预留?

对超过 4000 天数据的 bigquery 表进行分区?

从 SQL 查询向 BigQuery 表添加多个分区列

旧版 sql 和标准 sql 之间的 BigQuery 表分区差异

使用 bigquery 和单个查询进行分区,根据日期将表拆分为多个表