首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bigquery标准sql =从字符串中提取数据

bigquery标准sql =从字符串中提取数据
EN

Stack Overflow用户
提问于 2019-09-11 17:25:17
回答 2查看 220关注 0票数 0

我希望提取字符串中跟在指定字母后面的部分,例如从以下字符串中提取:

wc:275,nwc:267,c1.3:2,c12.1:25,c12.10:39,c12.12:21,c12.13:4

我希望提取275 (对于wc),2(对于c1.3)和25 (对于c12.1)。

我尝试了以下方法,但字段anew、ridanxietycnt和wordcount仅显示"NULL“。

代码语言:javascript
复制
SELECT substr(CAST((DATE) AS STRING),0,8) as daydate,
count(1) as count,
avg(CAST(REGEXP_REPLACE(V2Tone, r',.*', "")AS FLOAT64)) tone,
avg(CAST(REGEXP_EXTRACT(GCAM, r'c1.3:([-d.]+)')AS FLOAT64)) anew,
sum(CAST(REGEXP_EXTRACT(GCAM, r'c12.1:([-d.]+)')AS FLOAT64)) ridanxietycnt, 
sum(CAST(REGEXP_EXTRACT(GCAM, r'wc:(d+)')AS FLOAT64)) wordcount   
FROM `gdelt-bq.gdeltv2.gkg_partitioned` where _PARTITIONTIME BETWEEN TIMESTAMP('2019-02-02') AND TIMESTAMP('2019-02-02') 
group by daydate

我希望看到每一列的聚合数字。

我想知道问题是不是与正则表达式有关?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-12 04:15:54

您可以将它们视为简单的键/值对,然后在其上进行聚合。类似于:

代码语言:javascript
复制
select 
   substr(CAST((DATE) AS STRING),0,8) as daydate,
   split(x,':')[safe_offset(0)] as key, 
   cast(split(x,':')[safe_offset(1)] as float64) as value
from `gdelt-bq.gdeltv2.gkg_partitioned`, 
unnest(split(GCAM, ',')) as x
where _PARTITIONTIME BETWEEN TIMESTAMP('2019-02-02') AND TIMESTAMP('2019-02-02')

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2019-09-11 19:52:38

这应该会得到2(新的),25 (ridanxietycnt),275 (字数),按照这个顺序

代码语言:javascript
复制
SELECT
SAFE_CAST(REGEXP_EXTRACT('wc:275,nwc:267,c1.3:2,c12.1:25,c12.10:39,c12.12:21,c12.13:4', r'c1.3:(\d+)') as FLOAT64) anew,
SAFE_CAST(REGEXP_EXTRACT('wc:275,nwc:267,c1.3:2,c12.1:25,c12.10:39,c12.12:21,c12.13:4', r'c12.1:(\d+)') as FLOAT64) ridanxietycnt, 
SAFE_CAST(REGEXP_EXTRACT('wc:275,nwc:267,c1.3:2,c12.1:25,c12.10:39,c12.12:21,c12.13:4', r'wc:(\d+)') as FLOAT64) wordcount  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57886019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档