这是一个后续问题::
我制作了一个物化视图,它对 50GByte 表使用一组相当复杂的查询。表中的数据每 10-20 分钟更新一次,我已将物化视图设置为每 30 分钟更新一次。完美......除了我真正想要的是物化视图只对最新数据运行查询。谷歌文档实际上表示,只要查询“简单”,它就会这样做。我的查询有 JSON 提取、一些 REGEXPS 和一些 CASE 语句,但没有 SQL UDF 或 Javascript。
我实际上想要一些复杂的 UDF......但如果这会将“简单”变成每次都会导致完整 50GByte 刷新的东西,则不会。
如何确定我的查询是否足够简单,不会每 30 分钟查询一次完整的 50GByte?除了等待月底查看我的账单...
取得一些进展。首先,即使我是管理员,我也需要添加到 IAM
• 角色/bigquery.metadataViewer
没有它,一切都不起作用。完成此操作后,以下查询显示对
BQ.REFRESH_MATERIALIZED_VIEW
的调用
SELECT
creation_time,job_id,query, total_slot_ms, total_bytes_processed,
materialized_view_statistics.materialized_view[SAFE_OFFSET(0)].rejected_reason
AS full_refresh_reason
FROM
`region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
job_id LIKE '%materialized_view_refresh_%'
ORDER BY creation_time DESC LIMIT 20
现在我看到我的一些材质视图表现正确:第一次创建它们时,完全刷新原因被标记为“无数据”,并且消耗的数据量很大,但所有后续刷新都被标记为原因“null” “并且消耗的数据量非常小。
不幸的是,我的大怪兽总是被标记为“无数据”,所以每次刷新时它都会消耗掉整个 50 GByte,这有点没有抓住要点……但至少现在我有一些东西可以开始了。