雪花限定查询错误 'Invalid data type [NUMBER(18,0)] for predicate [RANK()'
Snowflake qualify query error 'Invalid data type [NUMBER(18,0)] for predicate [RANK()'
我正在尝试 运行 Snowflake 中的查询,该查询使用 rank() 函数和 qualify 来尝试在两列之间进行最佳匹配(使用 editdistance),我得到以下结果错误:
谓词 [RANK() OVER (PARTITION BY key1 ORDER BY editdistance(name1, name2) ASC NULLS LAST)]
的无效数据类型 [NUMBER(18,0)]
查询如下所示:
select
key1,
key2
from
table
qualify
rank() over (
partition by key1 order by editdistance(name1, name2) asc
)
我真的不清楚错误指的是什么数字。 name1/name2都是varchar,key1是varchar。希望有人能给我指点。
谢谢,
杰夫
Dean 在他上面的评论中指出了问题,所以只是将其移至答案以结束此循环:
You need to provide a value for the QUALIFY function so it should be something like: qualify rank() over ( partition by key1 order by editdistance(name1, name2) asc ) = 1
QUALIFY 的工作方式与 WHERE 类似,但它在查询执行期间的不同点进行评估。 QUALIFY 需要一个谓词,它的计算结果应该是布尔值。
QUALIFY <predicate>
表达式:
rank() over (partition by key1 order by editdistance(name1, name2))
returns 数字。
将结果与整数进行比较可修复错误:
rank() over (partition by key1 order by editdistance(name1, name2)) = 1
值得注意的是,数据中可能存在联系,即超过一行的每个键的距离相同,对于这种情况,使用 DENSE_RANK:
更安全
dense_rank() over (partition by key1 order by editdistance(name1, name2)) = 1
我正在尝试 运行 Snowflake 中的查询,该查询使用 rank() 函数和 qualify 来尝试在两列之间进行最佳匹配(使用 editdistance),我得到以下结果错误:
谓词 [RANK() OVER (PARTITION BY key1 ORDER BY editdistance(name1, name2) ASC NULLS LAST)]
的无效数据类型 [NUMBER(18,0)]查询如下所示:
select
key1,
key2
from
table
qualify
rank() over (
partition by key1 order by editdistance(name1, name2) asc
)
我真的不清楚错误指的是什么数字。 name1/name2都是varchar,key1是varchar。希望有人能给我指点。
谢谢, 杰夫
Dean 在他上面的评论中指出了问题,所以只是将其移至答案以结束此循环:
You need to provide a value for the QUALIFY function so it should be something like: qualify rank() over ( partition by key1 order by editdistance(name1, name2) asc ) = 1
QUALIFY 的工作方式与 WHERE 类似,但它在查询执行期间的不同点进行评估。 QUALIFY 需要一个谓词,它的计算结果应该是布尔值。
QUALIFY <predicate>
表达式:
rank() over (partition by key1 order by editdistance(name1, name2))
returns 数字。
将结果与整数进行比较可修复错误:
rank() over (partition by key1 order by editdistance(name1, name2)) = 1
值得注意的是,数据中可能存在联系,即超过一行的每个键的距离相同,对于这种情况,使用 DENSE_RANK:
更安全dense_rank() over (partition by key1 order by editdistance(name1, name2)) = 1