Snowflake/DBT环境下已选与取消商品列相减生成最终购物车方案咨询
Snowflake 最终购物车计算实现方案
方案核心逻辑
直接使用Snowflake内置的ARRAY_EXCEPT函数即可实现需求,该函数会返回第一个输入数组中存在、且第二个输入数组中不存在的所有元素,正好匹配「从已选商品中剔除所有取消选择商品」的规则。
分场景实现代码
场景1:Picked、Unpicked列已存储为数组格式
直接调用函数即可:
SELECT Customer_ID, Picked, Unpicked, ARRAY_EXCEPT(Picked, Unpicked) AS Final_Cart FROM 你的表名;
场景2:Picked、Unpicked列为逗号分隔的字符串格式
先拆分字符串为数组,同时修剪元素前后空格避免匹配失败,再做差值计算:
SELECT Customer_ID, Picked, Unpicked, -- 如需最终输出为逗号分隔字符串,可在外层包裹 ARRAY_TO_STRING(xxx, ',') ARRAY_EXCEPT( ARRAY(SELECT TRIM(value) FROM TABLE(FLATTEN(INPUT => SPLIT(Picked, ',')))), ARRAY(SELECT TRIM(value) FROM TABLE(FLATTEN(INPUT => SPLIT(Unpicked, ',')))) ) AS Final_Cart FROM 你的表名;
示例验证
对应你给出的测试案例,函数输出完全符合预期:
- 客户ID 799235:已选数组为
['shirt','pants','glasses'],取消数组为['glasses'],输出['shirt','pants'] - 客户ID 799246:已选数组为
['dress','pants','glasses'],取消数组为['pants','dresses'],dress与dresses为不同元素不会被剔除,最终输出['glasses']
内容的提问来源于stack exchange,提问作者AIFOS
相关产品推荐
相关产品推荐

