Google bigquery 分区表上的完整表扫描

Google bigquery 分区表上的完整表扫描,google-bigquery,Google Bigquery,我有两个表(pageviews和base_events),它们都是在日期字段派生的_tstamp上分区的。每天晚上,我都会对base_events表进行增量更新,从页面视图中查询新数据,如下所示: select * from `project.sp.pageviews` where derived_tstamp > (select max(derived_tstamp) from `project.sp_modeled.base_events`) 查看查询

我有两个表(pageviews和base_events),它们都是在日期字段派生的_tstamp上分区的。每天晚上,我都会对base_events表进行增量更新,从页面视图中查询新数据,如下所示:

  select
    *
  from
    `project.sp.pageviews`
    where derived_tstamp > (select max(derived_tstamp) from `project.sp_modeled.base_events`)
查看查询成本,此查询将扫描整个表,而不仅仅是新数据。通常这应该只得到昨天的数据


您知道查询出了什么问题吗?

子查询将触发全表扫描。解决方案是使用脚本。我已通过以下查询解决了我的问题:

declare event_date_checkpoint DATE default (
      select max(date(page_view_start)) from `project.sp_modeled.base_events
  );

select
    *
  from
    `project.sp.pageviews`
    where derived_tstamp > event_date_checkpoint
有关脚本的详细信息:

经过进一步挖掘,我现在明白了,子查询不可能进行修剪。基本的解决方案是使用脚本:是的,你找到了正确的解决方案@如果你发现了一个问题,我可以随意为你自己的问题添加一个答案,这有助于其他人在将来找到答案,如果他们有相同的问题:)