javascript - javascript函数在雪花函数中给出NULL
问题描述
我已经使用 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 出了什么问题?任何帮助,将不胜感激。谢谢你。
解决方案
你的代码有很多问题
- 你定义了一个函数,但不使用它,你需要在最后添加一个调用
- 您错误地使用了 toString,如果您坚持使用字符串,请使用 String(value)
- 如果你使用字符串,你不能用'+'来添加它们来添加它们的数值......
- 你最后有一个不必要的+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
功能:)
推荐阅读
- javascript - 无法将视频从网页流式传输到 python 服务器起诉 python 服务器中的 flask-socketio 和 java 脚本中的 socetio
- c - 在管道中,我发送了一些东西,但收到了不同的东西
- sendgrid-api-v3 - SendGrid 抑制/反弹没有结果 []
- c# - 当我在 DataGridView 中单击搜索数据按钮时,它会在 DataGridView 中添加我想要搜索的内容
- mongodb - 找不到“mongodb-org-tools”的版本“100.2.1”
- azure - 未在 azure linux 应用服务上添加缓存控制标头
- amazon-web-services - 将图像从一个 S3 存储桶复制到 diff 帐户 s3 存储桶
- firebase - (颤振)多邻国定时器
- reactjs - 当他们都是反应组件时分配给孩子什么类型
- r - 带有 for 循环的 Ploty R add_trace 覆盖来自 get(Variable) 的跟踪