如何解决如何更改此UDF以分析BigQuery中的字符串与表格
我试图在BigQuery中获得一个字符串与一个表之间的Levenshtein距离的最佳匹配结果。
实际上,我有一个函数,该函数以2个字符串作为输入来获取距离,但是对于某些数据集,查询用完了时间。我相信(如果我错了,请更正我)将函数更改为接收1个输入和1个表,可以提高性能(我没有创建此函数)。
功能如下:
CREATE OR REPLACE FUNCTION
`PROJECT_ID.DATASET.LevenshteinDistance`(in_a STRING,in_b STRING) RETURNS INT64 LANGUAGE js AS """
/*
* Data Quality Function - Fuzzy Matching
* dq_fm_LevenshteinDistance
* Based off of https://gist.github.com/andrei-m/982927
* input: Two strings to compare the edit distance of.
* returns: Integer of the edit distance.
*/
var a = in_a.toLowerCase();
var b = in_b.toLowerCase();
if(a.length == 0) return b.length;
if(b.length == 0) return a.length;
var matrix = [];
// increment along the first column of each row
var i;
for(i = 0; i <= b.length; i++){
matrix[i] = [i];
}
// increment each column in the first row
var j;
for(j = 0; j <= a.length; j++){
matrix[0][j] = j;
}
// Fill in the rest of the matrix
for(i = 1; i <= b.length; i++){
for(j = 1; j <= a.length; j++){
if(b.charAt(i-1) == a.charAt(j-1)){
matrix[i][j] = matrix[i-1][j-1];
} else {
matrix[i][j] =
Math.min(matrix[i-1][j-1] + 1,// substitution
Math.min(matrix[i][j-1] + 1,// insertion
matrix[i-1][j] + 1)); // deletion
}
}
}
return matrix[b.length][a.length];
""";
所需的输出仍然是1个数字(最佳匹配),但输入应为1个字符串和1个表。
我的两个问题是:
-
要实现此功能,我需要对此功能进行哪些更改?
-
在BigQuery中是否有更好的方法来执行此操作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。