Google Big Query中使用REGEXP_MATCH的奇怪行为

时间:2014-02-25 22:18:25

标签: regex google-bigquery

我在google big query中看到了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并不总是像宣传的那样发挥作用?

2 个答案:

答案 0 :(得分: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”。

:)

答案 1 :(得分:2)

注意:

  • REGEXP_MATCH('common_name',r'。*')匹配字符串'common_name'

  • REGEXP_MATCH(common_name,r'。*')匹配表中名为common_name的字段

第一个总是如此,因此你得到了所有结果。 我想你想要引用该字段的内容,所以你需要使用第二个。

  • REGEXP_MATCH(common_name,r'A。*')应返回字段common_name包含“A”的所有记录。

希望这会有所帮助。