繁体   English   中英

bigquery 使用正则表达式连接表

[英]bigquery join tables using regex

我有两个表都有一个名为主机的列。 我想通过主机的某些部分加入这两个表,如下所示:

select * from `config.tested` a
join `config.active` b
on REGEXP_EXTRACT(a.host,  r'.*req-([a-z0-9]{12})')=REGEXP_EXTRACT(b.host,  r'.*req-([a-z0-9]{12})')

有没有更有效的方法?像USING(REGEXP_EXTRACT(host, r'.*req-([a-z0-9]{12})'))它不起作用

我认为您的逻辑没有问题,但您可以使用left()

ON LEFT(a.host, 16) = LEFT(b.host, 16)

这包括“reg-”以及最终字符串。

如果您仍然需要确保值与您想要的模式相匹配,则添加:

WHERE REGEXP_CONTAINS(a.host, r'.*req-([a-z0-9]{12})') 

有没有更有效的方法?

如果通过“更有效率”你的意思是更少冗长和更容易阅读/维护 - 试试下面

#standardSQL
create temp function part(host string) as (
  regexp_extract(host, r'.*req-([a-z0-9]{12})')
);
select * 
from `config.tested` a 
join `config.active` b
on part(a.host) = part(b.host)   

或其变体

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM