Google bigquery BigQuery中的模糊匹配

Google bigquery BigQuery中的模糊匹配,google-bigquery,cross-join,bigquery-udf,Google Bigquery,Cross Join,Bigquery Udf,优化BigQuery Fuzzymatch的性能 您好,我目前正在尝试直接在大查询中运行模糊匹配算法,希望获得一些关于如何优化我当前方法的指导。我想运行一个模糊匹配搜索,其中一个表a带有输入字符串,另一个表B带有我想检查的短语字符串。我使用JavaScript UDF实现如下: CREATE OR REPLACE FUNCTION `project.functions.fuzzymatch`(a string, b string) RETURNS INT64 DETERMINISTIC LANG

优化BigQuery Fuzzymatch的性能

您好,我目前正在尝试直接在大查询中运行模糊匹配算法,希望获得一些关于如何优化我当前方法的指导。我想运行一个模糊匹配搜索,其中一个
表a
带有
输入
字符串,另一个
表B
带有我想检查的
短语
字符串。我使用JavaScript UDF实现如下:

CREATE OR REPLACE FUNCTION `project.functions.fuzzymatch`(a string, b string)
RETURNS INT64
DETERMINISTIC
LANGUAGE js AS """
return fuzzball.token_set_ratio(a,b,{full_process: false});
"""
OPTIONS (library="gs:///fuzzball.umd.min.js");

create or replace table `tbl_fuzzymatch_output` as
with applied as (
select
t.input_id,
t.input,
s.value,
project.functions.fuzzymatch(t.input,s.value) as score
from
tbl_A t
cross join tbl_B s
)

select
input_id,
input,
value,
array_agg(struct(value, score)) matches
from applied
group by input_id, input
尽管对于我的测试集(10MN输入和2500个值),这已经运行得相当快了,但如果由于交叉连接的使用,我的表A有数百万甚至数十亿个条目,那么我担心可伸缩性

我曾尝试将表B中的潜在值作为数组添加到原始表中,并通过解封数组来调用该函数,但这导致初始表的文件大小急剧增大,因为数组存储似乎没有针对行进行优化

我的问题是:有没有办法在避免交叉连接的同时加快查询的执行,而不将数据存储在数组列中?也许我们可以以某种方式缓存
表B
的短语列表?很高兴有任何想法和经验,谢谢

最好的, 斯蒂芬