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 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

将Big Query中的数据自动导入Google表格?

使用 Google Big Query 在 Google App 脚本上超过最大执行时间

Google Data Studio:将用户输入写回 Google Big Query 表

找出每个字段在 Google Big Query 中占用的空间量

如何将 Google Cloud SQL 与 Google Big Query 集成

在 Google Big Query 中使用 bq 命令行执行查询