我想使用presto函数比较两个数组。我有两个数组(a& b(,我需要比较并检查输入数组与给定比较数组(x(。
的分数(索引(Input_Array - A[1,2,4,5,3,9]
Input_Array - B[1,2,3,7,0,5,4,9]
Comparison_Array - X[1,2,3,4]
Output:
A - Index : 2
B - Index : 3
您可以使用PRESTO reduce
降低功能,并与行订阅[n]
结合使用(自Presto 314以来可用(。(对于较旧的Presto版本,这将是更详细的,但仍然可以。让我知道您是否使用较旧版本并且需要帮助。(
SELECT
reduce(
sequence(0, cardinality(a)), -- numbers [0..n)
ROW(true, 0), -- (still matching, position matched)
(state, i) ->
IF (state[1] AND i < cardinality(a) AND i < cardinality(x) AND a[i + 1] = x[i + 1],
ROW(true, i + 1),
ROW(false, state[2])),
state -> state[2])
FROM (VALUES
(ARRAY[1,2,4,5,3,9], ARRAY[1,2,3,4]),
(ARRAY[1,2,3,7,0,5,4,9], ARRAY[1,2,3,4]),
(ARRAY[1,2], ARRAY[1,2,3,4]),
(ARRAY[], ARRAY[1,2,3,4])) t(a, x);
此打印:
_col0
-------
2
3
2
0
(4 rows)
我建议写下您的自定义功能以处理这种要求。这样,您可以轻松地管理代码,并在不做太多努力的情况下进行新的更改。
指南在Presto中编写新功能。https://trino.io/docs/current/develop/functions.html
编写功能后,将插件添加到SPI概述中所述的插件目录中。
还有另一个示例用于从Qubole Blog编写Presto UDF。http://www.qubole.com/blog/product/plugging-in-presto-udfs/
如果您可以使其正常工作。