[英]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.