我有一个hive表(学生),其中有两列是数组。
student_list array<string>
present_list array<string>
我知道有一个函数array_contains(Array<T>, value)
来检查这个项目是否存在于数组中,但是我想知道的是这个项目在多个项目中存在的索引。
例如 student_list 的数据是一些学生 id,如
["1LPT5Q4IE5XC","1SU2QNCG98BC","29V3SAK2Q79Z"]
如果 present_list 是
["1LPT5Q4IE5XC","29V3SAK2Q79Z"]
我希望该行的输出为[0,2]
。
1条答案
按热度按时间bvn4nwqk1#
有一个选择是使用posexplode来生成你的列表的位置和值,如下所示。
上面的结果是
[0,2]
.我们的想法是生成一个位置列表,然后在列表中的两个值之间做简单的匹配。使用hive中的collect_set
函数收集索引位置。这种方法的一个缺点是在做posexplode时数据的交叉连接。使用横向视图从每个数组项目中生成行。