BigQuery - 是否可以在àFROM中使用IF语句?

时间:2017-01-18 15:19:11

标签: 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允许这种操作吗?

2 个答案:

答案 0 :(得分:4)

您可以使用standard SQLinterface ISimpleOptions { name: string; dob: number; } interface ICustomOptions extends ISimpleOptions { height: number; weight: number; gender?: string; } interface IOptions extends ISimpleOptions { gender: string; } 上的条件执行此操作。例如,

_TABLE_SUFFIX

要记住的一件事是,由于匹配表后缀可能是动态确定的(根据表格中的内容),因此您需要为全表扫描付费。

答案 1 :(得分:1)

对于BigQuery Legacy SQL(您的问题中的代码看起来更像),您可以使用TABLE_QUERY表通配符函数来实现此目的。

见下面的例子:

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

同时,如果可能,请考虑migrating to BigQuery Standard SQL