-3

タイムスタンプの配列を持つ列と、タイムスタンプが 1 つだけの列を持つデータセットがあります。大小の条件として c1 タイムスタンプを使用して、配列のサイズを取得しようとしています。

テーブル (my_table):

c1 |           c2           |
----------------------------|
4  | [1,2,3,4,5,6,7,8,9,10] |
1  | [1,2,3,4,5,6,7,8,9,10] |
5  | [1,2,3,4,5,6,7,8,9,10] |
3  | [1,2,3,4,5,6,7,8,9,10] |

クエリ:

select
c1,
c2,
size(some_udf_split_on_c1(sort_array(<array>), c1)[1]) AS smaller_than_c1
size(some_udf_split_on_c1(sort_array(<array>), c1)[2]) AS larger_than_c1

from my_table

そこにある udf は、私の仮説の実装です。

出力:

c1 |           c2           | smaller_than_c1 | larger_than_c1
----------------------------|-----------------|---------------
4  | [1,2,3,4,5,6,7,8,9,10] |        3        |      6
1  | [1,2,3,4,5,6,7,8,9,10] |        0        |      9
5  | [1,2,3,4,5,6,7,8,9,10] |        4        |      5
3  | [1,2,3,4,5,6,7,8,9,10] |        1        |      8       
4

1 に答える 1

0

UDF は、探しているものへの最速のパスになります。これは、explode と group by を組み合わせて行うことで実現できる可能性がありますが 10 行の UDF コードと比較すると、UDF を作成するだけで満足できます。

于 2015-07-21T18:48:36.437 に答える