如何在Presto中比较两个阵列?

时间:2019-07-30 07:46:37

标签: arrays 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

2 个答案:

答案 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/

如果可以使用,可以尝试一下。