无法在 BigQuery 中对视图表的分区过滤器使用 IN 函数

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

所以我有一个名为 table_1

视图表
,它有一个名为
business_date
的分区字段。
table_1
是使用名为
data_mart.customer_raw
的原始表构建的。

这个表有很多业务需求,其中之一就是每个月末查看客户的交易情况。

这是我通常如何进行查询:

SELECT
  customer_id
  ,total_transaction
FROM
  table_1
WHERE
  business_date IN ('2024-01-31', '2024-02-29', '2024-03-31')

这很有效,但问题是我必须手动创建business_date过滤器,如果我需要超过10个日期,这将变得很麻烦。

这是我针对此问题尝试过的解决方法:

WITH dim_date AS (
SELECT
  DISTINCT business_date
FROM
  table_date
WHERE
  eom_flag IS TRUE
)

SELECT
  customer_id
  ,total_transaction
FROM
  table_1
WHERE
  business_date IN (SELECT business_date FROM dim_date)

注意:

table_date
是包含日期列表的表格

上面的解决方法导致了这个错误:

如果没有可用于分区消除的列“business_date”的过滤器,则无法查询表“data_mart.customer_raw”

有什么办法可以解决这个错误吗?

date filter google-bigquery partition
1个回答
0
投票

根据堆栈链接上发布的答案

to limit the partitions that are scanned in a query, you need to use a constant expression to filter the partition column.
,您的第一个查询满足以下条件,而第二个查询可能不满足条件,因为它可能不是常量。因此,它会抛出有关“business_date”列过滤器的错误

我想修改查询以支持该条件可能会解决问题。

将答案发布为社区 wiki,以造福于将来可能遇到此用例的社区。请随意编辑此答案以获取更多信息。

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