【发布时间】:2016-08-11 15:53:21
【问题描述】:
旧版 SQL
我正在使用 GBQ 的旧版 SQL 通过 TABLE_QUERY 函数动态查询表。我根据CURRENT_TIMESTAMP动态生成要查询的表名。例如,我从按季度分区的表中(即 mydataset.hit_data_[1-4])中过去 14 天的命中数据中选择设备。
标准 SQL
我需要将时区转换为 PST。 GBQ 标准 SQL 有TIME ZONE 转换。切换到标准 SQL,我可以使用 GBQ 标准 SQL 转换时区。但是,如果我现在尝试在同一个查询中使用 TABLE_QUERY 来执行我在 Legacy SQL 版本中所做的事情,我会得到:
Error: Table-valued functions are not supported
同时使用
有没有办法两全其美?如果前 14 天与 Q3 重叠,我想根据 Q4 的当前时间戳查询 mydataset.hit_data_3 和 mydataset.hit_data_4。
SELECT
device
FROM
TABLE_QUERY(mydataset, 'table_id = CONCAT(\"hit_data_\", STRING(QUARTER(TIMESTAMP(CURRENT_TIMESTAMP, "America/Los_Angeles")))) OR table_id = CONCAT(\"hit_data_\", STRING(QUARTER(DATE_ADD(TIMESTAMP(CURRENT_TIMESTAMP, "America/Los_Angeles"), INTERVAL -14 DAY)))) ')
WHERE
DATE(date_time) BETWEEN DATE(DATE_ADD(TIMESTAMP(CURRENT_TIMESTAMP, 'America/Los_Angeles'), INTERVAL -14 DAY))
AND DATE(CURRENT_DATE())
;
看起来很丑,但在GBQ中应该是有效的。
【问题讨论】:
标签: google-bigquery