bigquery使用正则表达式联接表

时间:2020-11-12 11:16:33

标签: 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})')

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

还有没有更有效的方法?

如果“更有效”是指冗长且易于阅读/维护-请尝试以下

#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)   

或其变体