如何解决BigQuery中的模糊匹配
在BigQuery Fuzzymatch上优化性能
您好,我目前正在尝试直接在Big Query中运行模糊匹配算法,并希望获得有关如何优化当前方法的一些指导。我想运行模糊匹配搜索,其中有一个table A
带有input
字符串的字符串,还有另一个table B
带有phrases
字符串的字符串。我正在使用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的潜在值作为数组添加到原始表中,并通过取消占用数组来调用该函数,但这导致初始表的文件大小膨胀,因为似乎数组存储没有在行上进行了优化。
我的问题是:有什么方法可以加快查询的执行速度,同时避免交叉连接并且不将数据存储在数组列中?也许我们可以以某种方式缓存table B
的短语列表?很高兴有任何想法和您的经验,谢谢!
最好, 斯蒂芬
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。