在from子句中表达为表名

时间:2016-08-10 02:08:36

标签: google-bigquery

在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

这样做的主要动机是长期存储更便宜。因此,分割数据是有意义的,因此您不必每天都写入相同的大表。

3 个答案:

答案 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

  • 正如Elliott所说,分区表是使用一个巨型表的新推荐方式,同时获得成本效益:

https://cloud.google.com/bigquery/docs/creating-partitioned-tables