【发布时间】:2019-07-24 09:20:12
【问题描述】:
我正在尝试通过对其使用 BigQuery 提取来简化 BigQuery 中的列,但我遇到了一些问题。
以下是我从中提取数据的两个示例:
dc_pre=CLXk_aigyOMCFQb2dwod4dYCZw;gtm=2wg7f1;gcldc=;gclaw=;gac=UA-5815571-8:;auiddc=;u1=OVERDRFT;u2=undefined ;u3=undefined;u4=undefined;u5=SSA;u6=undefined;u7=na;u8=undefined;u9=undefined;u10=undefined;u11=undefined;~oref=https://www.online.bank.co.za/onlineContent/ga_bridge.html
dc_pre=COztt4-tyOMCFcji7Qod440PCw;gtm=2wg7f1;gcldc=;gclaw=;gac=UA-5815571-8:;auiddc=;u1=DDA13;u2 =undefined;u3=undefined;u4=undefined;u5=SSA;u6=undefined;u7=na;u8=undefined;u9=undefined;u10=undefined;u11=undefined;~oref=https://www.online.support.co.za/onlineContent/ga_bridge.html
我想提取 ;u1= 和 ;u2
之间的部分运行以下旧版 SQL 查询
SELECT
Date(Event_Time),
Activity_ID,
REGEXP_EXTRACT(Other_Data, r'(?<=u1=)(.*\n?)(?=;u2)')
FROM
[sprt-data-transfer:dtftv2_sprt.p_activity_166401]
WHERE
Activity_ID in ('8179851')
AND Site_ID_DCM NOT IN ('2134603','2136502','2539719','2136304','2134604','2134602','2136701','2378406')
AND Event_Time BETWEEN 1563746400000000 AND 1563832799000000
我得到了错误...
无法解析正则表达式“(?
这就是我的才华耗尽的地方,是因为我使用的是旧版 SQL 而导致的错误吗?或者是 REGEX 不支持的格式?
【问题讨论】:
-
在纯正则表达式中它确实有效,但是在 BigQuery 中使用查询时它就无效了。
-
也许你应该转义几个字符?
-
这就是我的才华耗尽的地方 :) 我可以在孤立的情况下找到解决 Regex 的方法,而且我在 BigQuery 中还可以,但是将这两个世界结合起来导致了问题。
-
如果输入字符串总是包含
u1=[the string you want];u2..,为什么不能直接使用r'u1=(.*?);u2'?顺便说一句,考虑迁移到标准 SQL。
标签: sql regex google-bigquery