【问题标题】:How do I generate a table name that contains today's date?如何生成包含今天日期的表名?
【发布时间】:2020-01-07 04:55:30
【问题描述】:

这可能看起来有点奇怪,但已经有每个日期的名称表。

在我的项目中,我有每个日期的表格,以便更容易处理统计数据。

当然,我不认为这总是最好的方法,但这是我项目的表结构。 (这是 Google BigQuery 和 Amazon Athena 中的常用技术。这个问题是关于 Google BigQuery 的)

所以要获取数据,我想生成今天的日期。如果我使用TODAY,即使是第二天,我也可以在不重写代码的情况下获取最近一天的数据。

我试过了,但代码不起作用。

不工作1:

CONCAT in FROM

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

错误:

未找到表值函数:CONCAT at [4:3]

不工作2:

create temporary function:

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

错误:

CREATE TEMPORARY FUNCTION 语句后面必须跟一个实际查询。

问题

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

【问题讨论】:

    标签: sql date google-bigquery


    【解决方案1】:

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

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

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

    希望对你有帮助。

    【讨论】:

    • 我试试这个。收到错误Invalid value: Table name "tableName" missing dataset while no default dataset is set in the request. at [4:1]
    • @shingo.nakanishi,我刚刚用一个可行的解决方案更新了我的答案。请问你可以试试吗?我很抱歉我之前的错误。
    【解决方案2】:

    你的第一个查询应该是这样的:

    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。

    【讨论】:

      猜你喜欢
      • 2022-12-24
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      相关资源
      最近更新 更多