我想做以下
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允许这种操作吗?
答案 0 :(得分:4)
您可以使用standard SQL中interface 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