我想使用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
答案 0 :(得分:2)
您可以将Presto reduce
array reduction function与ROW下标[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)
答案 1 :(得分:1)
我建议写下您的自定义函数来处理这种要求。这样,您可以轻松地管理代码并轻松进行新的更改。
预先编写新功能的指南。 https://prestosql.io/docs/current/develop/functions.html
编写函数后,按照SPI概述中的说明将插件添加到插件目录。
还有另一个从Qubole博客编写presto UDF的示例。 http://www.qubole.com/blog/product/plugging-in-presto-udfs/
如果可以使用,可以尝试一下。