BigQuery REGEXP_EXTRACT 返回 null

Posted

技术标签:

【中文标题】BigQuery REGEXP_EXTRACT 返回 null【英文标题】:BigQuery REGEXP_EXTRACT return null 【发布时间】:2016-02-09 15:10:09 【问题描述】:

从谷歌分析导出我正在尝试从下一个查询的 trafficSource.campaign 字段中提取最后一个数字:

SELECT
 REGEXP_EXTRACT(trafficSource.campaign,r':(\d+$)') as campaign,
FROM
  [95677969.ga_sessions_20160109] AS results,
WHERE
  hits.type IN ('TRANSACTION','PAGE')

此查询在 UI 中运行良好,并且每行都返回与 reg 表达式匹配的数字,但是当我将这个查询复制粘贴到我的脚本中时,总是返回空值。

trafficSource.campaign 值如下:

_dfa_107202:4637224:8531522

有人可以帮帮我吗?

【问题讨论】:

你能在这里发布你的脚本吗? 感谢您的评论@VadimSolovey,问题出在正则表达式引擎上,它不接受 re2 perl 字符类。 【参考方案1】:

转义是这里的问题。

当您向 BigQuery 提供以下内容时:

SELECT COUNT(*) FROM [publicdata:samples.shakespeare] WHERE REGEXP_MATCH(word, r'^\w$')

这在 BigQuery UI 中可以正常工作(结果为 283)。但是,如果您将相同的字符串复制到您最喜欢的编程语言中,它可能会尝试将 \ 读取为其转义字符之一,因此您将不得不对其进行双重转义 - 或者想出另一种方法来将字符串原样提供给它由您的脚本解释器执行。

【讨论】:

嗨 Felipe,你是对的,问题出在正则表达式引擎中,它适用于 r'([[:digit:]]3,$)'

以上是关于BigQuery REGEXP_EXTRACT 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery 中的 REGEXP_EXTRACT 不返回任何结果

如何在 BigQuery 中使用 REGEXP_EXTRACT 仅提取数值?

BigQuery REGEXP_EXTRACT from URL - 提取参数值

使用 regexp_extract 从 BigQuery 中删除单引号和双引号

BigQuery REGEXP_EXTRACT 返回 null

在 Bigquery 中使用 REGEXP_EXTRACT 查找破折号之间的字符串