如何比较Presto中的两个阵列



我想使用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/

如果您可以使其正常工作。

相关内容

  • 没有找到相关文章