从配置单元阵列提取记录

gblwokeq  于 2021-06-27  发布在  Hive
关注(0)|答案(7)|浏览(342)

我有一个配置单元表,其中tripid的数据加载为tripid、gps位置\u 1、gps位置\u 2位置,一次旅行可能有10个gps位置,另一次旅行可能有500个gps位置,当我查询数据时,结果如下
从trip中选择tripid、size(gps)作为计数;
tripid gps|U location|U 1 | gps|U location|U 2 |计数|
1451f2b3d | 44.1145 | 44.1148 | 9|
选择tripid、gps.gps\u location\u 1、gps.gps\u location\u 1作为trip的计数;
+---------+

pu3pd22g

pu3pd22g1#

--------+1451f2b3d |[44.1145,44.1146,44.1147,44.1148,44.1148,44.1129,44.1127,44.1121]|[44.1148,44.1146,44.1146,44.1141,44.1138,44.1129,44.1127]| 9 | +---------+

30byixjq

30byixjq2#

--------+
tripid | gps |位置| 1 | gps |位置| 2 |计数|
+---------+

wz3gfoph

wz3gfoph3#

使用 lateral view explode :

elect tripid, coordinates.gps_location_1, coordinates.gps_location_1 
  from trip
       lateral view outer explode(gps) s as coordinates
``` `explode()` udtf为每个数组元素生成行。横向视图将udtf应用于基表的每一行,然后将生成的行与输入行连接起来,形成具有指定表别名的虚拟表。
有关侧视图的更多信息,请参见此答案。
f45qwnt8

f45qwnt84#

--------+
我可以从trip数组表中看到第一个值。
从trip中选择tripid,gps[0].gps\u location\u 1,gps[0].gps\u location\u 1;
tripid gps\位置\u 1 gps\位置\u 2
1451f2b3d 44.1145 44.1148美元
trip数组表的第二行
从trip中选择tripid,gps[1].gps\u location\u 1,gps[1].gps\u location\u 1;
tripid gps\位置\u 1 gps\位置\u 2
1451f2b3d 44.1146 44.1146
trip数组表的最后一行
从trip中选择tripid、gps[大小(gps)].gps\位置\ 1、gps[大小(gps)].gps\位置\ 1;
1451f2b3d 44.1121 44.1127美元
我需要像这样将每一行存储在新的target\u trip表中,循环遍历trip表中一个tripid的所有行,并插入如下所示的target\u表中。
我怎样才能做到呢?
tripid gps\位置\u 1 gps\位置\u 2
1451f2b3d 44.1145 44.1148美元
1451f2b3d 44.1146 44.1146
1451f2b3d 44.1147 44.1146
1451f2b3d 44.1148 44.1141
1451f2b3d 44.1129 44.1138美元
1451f2b3d 44.1127 44.1129美元
1451f2b3d 44.1121 44.1127美元

相关问题