BigQuery如何修改SET语句实现筛选指定或全部业务单元
你之前的写法错误原因:IN UNNEST 走的是精确值匹配逻辑,你填入的.、*、%等属于通配符,仅适用于LIKE、正则匹配类函数,无法在精确匹配场景下生效,因此查询返回空结果。
以下两种实现方案都满足你仅修改SET语句即可切换全量/指定业务单元查询的需求:
方案1:使用标记位兼容两种场景
该方案仅需要调整一次WHERE子句的判断逻辑,后续所有使用的同事都只需要修改SET语句即可切换查询范围:
DECLARE business_units array<string>; -- 查指定业务单元时使用该写法 -- SET business_units = ["unit_A", "unit_C", "unit_D"]; -- 需要查询所有业务单元时,仅修改为以下这行即可 SET business_units = ["ALL"]; SELECT * FROM dataset WHERE -- 数组包含ALL标记时,跳过业务单元匹配,返回全量结果 ("ALL" IN UNNEST(business_units)) OR -- 无ALL标记时,仅匹配指定的业务单元 bu_name IN UNNEST(business_units)
方案2:直接赋值全量业务单元数组
如果你不想修改原有WHERE子句的逻辑,也可以直接将表中全量业务单元的查询结果赋值给变量,仅修改SET语句即可实现全量查询:
DECLARE business_units array<string>; -- 自动读取表中所有存在的业务单元,无需手动枚举 SET business_units = ARRAY(SELECT DISTINCT bu_name FROM dataset); SELECT * FROM dataset WHERE bu_name IN UNNEST(business_units)
内容的提问来源于stack exchange,提问作者Rafael Pinheiro
相关产品推荐
相关产品推荐

