在BigQuery中有一种方法可以使用表达式在FROM
子句中指定表名吗?
例如,假设我们将数据分成多个表 - 一年中的每个月一个。 2016_01,2016_02,2016_03等。现在我们要为当前月份的数据创建一个视图。我希望像
这样的东西 SELECT * FROM [project:dataset.${REPLACE(LEFT(CURRENT_DATE(),7),'-','_')}]
以便对表达式进行求值,并在执行查询时生成SELECT * FROM [project:dataset.2016_08]
。
为了进一步发展,让我们说每天有一张桌子。现在,用户需要日期范围为2016年1月1日至2016年3月31日的数据。所以我们生成我们的查询:
SELECT * FROM 2016_01_01, 2016_01_02, ...and so on... 2016_03_31
这样做的主要动机是长期存储更便宜。因此,分割数据是有意义的,因此您不必每天都写入相同的大表。
答案 0 :(得分:2)
你见过partitioned tables吗?它们与您所描述的非常相似。分区表允许您过滤特定的日期范围,只需为您查询的日期付费。
答案 1 :(得分:1)
如果现有表未分区,则另一种方法是使用标准SQL通配符表。可以使用WHERE子句中特殊列的谓词来指定要查询的表。
https://cloud.google.com/bigquery/docs/querying-wildcard-tables
答案 2 :(得分:0)
3个选项,给出问题陈述:
TABLE_QUERY()
https://cloud.google.com/bigquery/query-reference#table-query
TABLE_DATE_RANGE()
不太灵活,但效率更高:https://cloud.google.com/bigquery/query-reference#table-date-range
https://cloud.google.com/bigquery/docs/creating-partitioned-tables