Sql 使用正则表达式的bigquery联接表

Sql 使用正则表达式的bigquery联接表,sql,google-bigquery,Sql,Google Bigquery,我有两个表,它们都有一个名为host的列。我想通过主机的某个部分连接这两个表,如下所示: 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})') 有没有更有效的方法?比如使用(REGEXP_EXTRACT(host,r'.*req-([a-z

我有两个表,它们都有一个名为host的列。我想通过主机的某个部分连接这两个表,如下所示:

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})')

有没有更有效的方法?比如
使用(REGEXP_EXTRACT(host,r'.*req-([a-z0-9]{12}))
它不起作用我看你的逻辑没有问题,但是你可以使用
left()

这包括“reg-”以及最后一个字符串

如果仍然需要确保值与所需的模式匹配,请添加:

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

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

这包括“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)   
还是它的变异

有没有更有效的方法

如果“更高效”的意思是更少的冗长和更容易阅读/维护-请尝试下面的内容

#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)   
还是它的变异