我已经使用Javascript在雪花内创建了一个函数来计算字符串距离,但是该函数给了我NULL值。我无法调试该功能。
代码:
CREATE OR REPLACE FUNCTION cat_map_trial4(a string,b string)
RETURNS STRING
LANGUAGE JAVASCRIPT
AS
$$
function levenshteinDistance(s1, s2) {
if (!s1.length) return toString(s2.length);
if (!s2.length) return toString(s1.length);
return toString(Math.min(
levenshteinDistance(s1.substr(1), s2) + 1,
levenshteinDistance(s2.substr(1), s1) + 1,
levenshteinDistance(s1.substr(1), s2.substr(1)) + (s1[0] !== s2[0] ? 1 : 0)
) + 1);
}
$$
select cat_map_trial4('stackoverflow', 'stack') as dist;
输出
dist
NULL
JavaScript有什么问题? 任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
您的代码中存在许多问题
这是一个更正的版本(仍然很慢,但是可以工作):
CREATE OR REPLACE FUNCTION cat_map_trial4(a string,b string)
RETURNS STRING
LANGUAGE JAVASCRIPT
AS
$$
function levenshteinDistance(s1, s2) {
if (!s1.length) return s2.length;
if (!s2.length) return s1.length;
return Math.min(
levenshteinDistance(s1.substr(1), s2) + 1,
levenshteinDistance(s2.substr(1), s1) + 1,
levenshteinDistance(s1.substr(1), s2.substr(1)) + (s1[0] !== s2[0] ? 1 : 0)
);
}
return levenshteinDistance(A, B);
$$;
但是您的代码最大的问题是它完全不必要,因为Snowflake非常出色,它提供了内置的快速EDITDISTANCE
函数:)>