Google Big Query 中 REGEXP_MATCH 的奇怪行为
Posted
技术标签:
【中文标题】Google Big Query 中 REGEXP_MATCH 的奇怪行为【英文标题】:Bizarre Behavior with REGEXP_MATCH in Google Big Query 【发布时间】:2014-02-25 22:18:25 【问题描述】:我在 google 大查询中看到 REGEXP_MATCH
函数的异常行为。该函数似乎对公共数据非常有效,但不适用于我的数据集。我有一个从 csv 导入的数据集,前两行(第一行是标题行,它全部变成了所有内容都是字符串的架构),还有很多,但以下是这种情况下唯一相关的数据。
"id","common_name","botanical_name","low_hardiness_zone","high_hardiness_zone","type","exposure_min","exposure_max","moisture_min","moisture_max"
"plant1","Abelia","Abelia zanderi 'Conti (Confetti)'","5b","9a","Shrub","Partial Sun","Full Sun","Dry","Dry"
当我运行查询时:
SELECT * FROM [PlantLink_Plant_Types.plant_data_set]
WHERE REGEXP_MATCH('common_name',r'.*')
我得到每一个结果。
但是,当我运行查询时:
SELECT * FROM [PlantLink_Plant_Types.plant_data_set]
WHERE REGEXP_MATCH('common_name',r'A.*')
我没有得到任何结果,这真的很奇怪,因为植物通用名 Abelia 以 A 开头。
现在我的正则表达式魔法不是那么强大,但我很确定模式没有错。此外,我使用REGEXP_MATCH
运行了公共数据集测试查询,它们运行正常。有谁知道为什么REGEXP_MATCH
不会总是像宣传的那样运作?
【问题讨论】:
【参考方案1】:注意:
REGEXP_MATCH('common_name',r'.*') 匹配字符串 'common_name'同时
REGEXP_MATCH(common_name,r'.*') 匹配表中名为 common_name 的字段第一个总是正确的,因此你会得到所有的结果。 我猜你想引用该字段的内容,所以你需要使用第二个。
REGEXP_MATCH(common_name,r'A.*') 应该返回字段 common_name 包含“A”的所有记录。希望这会有所帮助。
【讨论】:
【参考方案2】:问题是字符串“common_name”不以“A”开头。
检查一下:
REGEXP_MATCH('common_name',r'.*')
:所有结果。
REGEXP_MATCH('common_name',r'A.*')
:没有结果。
REGEXP_MATCH('common_name',r'c.*')
:所有结果。
REGEXP_MATCH(common_name,r'A.*')
:某处为“A”的所有结果。
:)
【讨论】:
我非常愚蠢。该死的,我以为那东西只取列名。谢谢! 别害羞,这是一个完全正确的问题!以上是关于Google Big Query 中 REGEXP_MATCH 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google Big Query 在 Google App 脚本上超过最大执行时间
Google Data Studio:将用户输入写回 Google Big Query 表
找出每个字段在 Google Big Query 中占用的空间量