所以我有一个名为 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”
有什么办法可以解决这个错误吗?
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,以造福于将来可能遇到此用例的社区。请随意编辑此答案以获取更多信息。