Sql BigQuery-是否可以在à;从…起

Sql BigQuery-是否可以在à;从…起,sql,google-bigquery,Sql,Google Bigquery,我想做以下几件事 FROM if(... = ..., table_date_range(mytable, timestamp('2017-01-01'), timestamp('2017-01-17')), table_date_range(mytable, timestamp('2016-01-01'), timestamp('2016-01-17')) ) BigQuery上是否允许这种操作?您可以使用中的\u TABLE\u SUFFIX上的

我想做以下几件事

FROM if(... = ...,
        table_date_range(mytable, timestamp('2017-01-01'), timestamp('2017-01-17')),
        table_date_range(mytable, timestamp('2016-01-01'), timestamp('2016-01-17'))
      )

BigQuery上是否允许这种操作?

您可以使用中的
\u TABLE\u SUFFIX
上的条件来执行此操作。比如说,

SELECT *
FROM `my-dataset.mytable`
WHERE IF(condition,
         _TABLE_SUFFIX BETWEEN '20170101' AND '20170117',
         _TABLE_SUFFIX BETWEEN '20160101' AND '20160117');
需要记住的一件事是,由于匹配的表后缀可能是动态确定的(基于表中的某些内容),因此将对完整表扫描收取费用

对于BigQuery遗留SQL(您的问题中的代码更像),您可以使用表通配符函数来实现这一点

见下例:

SELECT
  ...
FROM
  TABLE_QUERY([mydataset],
    "CASE WHEN ... = ...
          THEN REPLACE(table_id, 'mytable_', '') BETWEEN '20170101' AND '20170117' 
          ELSE REPLACE(table_id, 'mytable_', '') BETWEEN '20160101' AND '20160117'
    ")
或者,使用IF()

同时,在可能的情况下,考虑

SELECT
  ...
FROM
  TABLE_QUERY([mydataset],
    "IF(... = ..., REPLACE(table_id, 'mytable_', '') BETWEEN '20170101' AND '20170117', 
              REPLACE(table_id, 'mytable_', '') BETWEEN '20160101' AND '20160117')
    ")