如何生成包含今天日期的表名?

时间:2020-01-07 04:55:30

标签: google-bigquery

我尝试过的但没有成功

CONCAT in FROM不起作用:

SELECT
  *
FROM
  CONCAT('foo_', FORMAT_TIMESTAMP('%Y%m%d', CURRENT_TIMESTAMP(), 'Asia/Tokyo'))

错误:

找不到表值函数:CONCAT位于[4:3]

create function不起作用:

create temporary function getTableName() as (CONCAT('foo_', FORMAT_TIMESTAMP('%Y%m%d', CURRENT_TIMESTAMP(), 'Asia/Tokyo')));

错误:

CREATE TEMPORARY FUNCTION语句之后必须是实际查询。

问题

如何生成包含今天日期的表名?

2 个答案:

答案 0 :(得分:1)

在这种情况下,我建议您使用Wild tables in BigQuery,它允许您使用Standard SQL中的某些功能。

使用Wild Tables,您可以使用 _TABLE_SUFFIX ,它使您能够过滤/扫描包含此参数的表。语法如下:

SELECT *
FROM `test-proj-261014.sample.test_*` 
where _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE)

我希望这会有所帮助。

答案 1 :(得分:0)

您的第一个查询应如下所示:

select CONCAT('foo_', FORMAT_TIMESTAMP('%Y%m%d', CURRENT_TIMESTAMP(), 'Asia/Tokyo'))

要创建临时功能,请使用以下代码:

create temp function getTableName() as
((select CONCAT('foo_', FORMAT_TIMESTAMP('%Y%m%d', CURRENT_TIMESTAMP(), 'Asia/Tokyo'))
));
select getTableName()

错误“必须在CREATE TEMPORARY FUNCTION语句后进行实际查询”。这是因为一旦定义了临时功能,则必须使用实际查询来使用该功能,然后该功能的有效性就会消失。要定义持久性UDF并在多个查询中使用它们,请浏览link来定义持久性函数。您可以在多个查询中重用持久性UDF,而只能在单个查询中使用临时UDF。