如何在BigQuery中匹配独立单词apple而非pine_apple?
解决BigQuery中仅匹配独立
apple单词的问题 我来帮你搞定这个正则匹配的小问题~你现在遇到的情况是,用"apple"作为正则模式时,会把pine_apple里的apple子串也匹配到,想要只筛选出独立的apple单词,有两种实用的方法:
方法1:使用正则单词边界(通用场景)
BigQuery采用RE2正则语法,你可以用\b来表示单词边界,它会匹配单词的起始或结束位置(比如字符串开头/结尾、非字母数字字符的边界)。把正则写成r"\bapple\b",就能确保只匹配独立的apple单词,不会命中pine_apple这类包含apple的复合词。
示例代码如下:
#standardSQL WITH table1 AS ( SELECT "basket_1" AS basket, "apple" AS fruit UNION ALL SELECT "basket_1", "mango" AS fruit UNION ALL SELECT "basket_2", "apple" AS fruit UNION ALL SELECT "basket_2", "apple" AS fruit UNION ALL SELECT "basket_2", "pine_apple" AS fruit UNION ALL SELECT "basket_2", "pine_apple" AS fruit ) SELECT * FROM table1 WHERE REGEXP_CONTAINS(fruit, r"\bapple\b");
运行这段代码后,只会返回所有fruit字段为apple的记录,pine_apple会被排除在外。
方法2:直接精确匹配(高效场景)
如果你的fruit字段存储的都是单个水果名称(没有多单词组合的情况),那完全不需要用正则,直接用等于判断更高效:
#standardSQL WITH table1 AS ( SELECT "basket_1" AS basket, "apple" AS fruit UNION ALL SELECT "basket_1", "mango" AS fruit UNION ALL SELECT "basket_2", "apple" AS fruit UNION ALL SELECT "basket_2", "apple" AS fruit UNION ALL SELECT "basket_2", "pine_apple" AS fruit UNION ALL SELECT "basket_2", "pine_apple" AS fruit ) SELECT * FROM table1 WHERE fruit = 'apple';
这种方式的查询性能比正则更好,适合字段值都是单一单词的场景。
内容的提问来源于stack exchange,提问作者user475043
相关产品推荐
相关产品推荐

