使用过滤器上的实际日期创建物化视图

问题描述 投票:0回答:1

我正在尝试创建一个物化视图来优化数据的消耗。我希望视图仅显示当天的寄存器,但是当我尝试使用 CURRENT_DATE 等函数时,它会显示错误消息“物化视图查询无法使用依赖于当前时间的函数(例如:CURRENT_TIMESTAMP、CURRENT_DATE)。”

我尝试使用一些自定义函数并在过滤器上使用选择来获取最后一次出现的情况(因为该表有大量数据),但都没有成功,因为它返回消息“增量物化视图查询包含不支持的数据”功能。这可能是由于分组键或聚合值之上有表达式造成的。”

-- CURRENT_DATE

CREATE MATERIALIZED VIEW `myProjectId.mydataSet.statistics_mv` AS
SELECT
  _id,
  column1,
  DATA_STATISTICS
...
  
FROM
  `myProjectId.mydataSet.mytable`
WHERE CAST(DATA_STATISTICS AS DATE) > CURRENT_DATE('America/Sao_Paulo')

-- 在过滤器上选择

CREATE MATERIALIZED VIEW `myProjectId.mydataSet.statistics_mv` AS
SELECT
  _id,
  column1,
  DATA_STATISTICS
...
  
FROM
  `myProjectId.mydataSet.mytable`
WHERE DATA_STATISTICS = (
  SELECT DATA_STATISTICS 
  FROM `statistics-homolog.MultAutomovel.raw`
  ORDER BY DATA_STATISTICS DESC
  LIMIT 1
)

有什么建议如何做吗?

sql google-bigquery materialized-views
1个回答
0
投票

在 BigQuery 中,物化视图是“预计算”视图,它定期缓存查询结果以提高性能和效率。 [参考:https://cloud.google.com/bigquery/docs/materialized-views-intro] 如果视图定义中有任何动态关键字(例如当前日期、当前时间戳),则 GBQ 无法处理刷新率,因此不允许使用这些关键字。

如果您不需要视图的“具体化”原因,那么您可以这样做:

例如

CREATE VIEW `tmp.sample_view_delete_me` AS select * from (SELECT 'a' as col, current_date() as day ) WHERE day = CURRENT_DATE()

我不知道你的这个要求的更多背景,但继续也许你可以研究一下:要么只使用标准视图或存储过程,要么使用其他一些将当前日期发送到 SQL 块的编程方式。

© www.soinside.com 2019 - 2024. All rights reserved.