我需要从Hive表中的下面的文本字符串中获取值5
。由于某种原因,我使用的floor和split函数可以获得值“0”和“3”,但我不知道如何在第一个“/”前面获取第一个值:
Column name: logsummary
**Record:5/0/3/0/4/4/143504**
Select
floor(split(logsummary, '[/]')[1]) as draws,
floor(split(logsummary, '[/]')[2]) as losses
from table A
答案 0 :(得分:0)
使用0值而不是1然后你将得到5值
hive> Select floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws;
+--------+--+
| draws |
+--------+--+
| 5 |
+--------+--+
下面的语句演示了来自记录
的楼层(0,1,2)的结果hive> Select floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws,floor(split('5/0/3/0/4/4/143504', '[/]')[1]),floor(split('5/0/3/0/4/4/143504', '[/]')[2]) losses;
+--------+------+---------+--+
| draws | _c1 | losses |
+--------+------+---------+--+
| 5 | 0 | 3 |
+--------+------+---------+--+
答案 1 :(得分:0)
Hive split()
函数有两个参数(string, regex pattern)
,并根据string
拆分regex
。拆分将以数组形式返回。
可以通过数组索引访问每个拆分。您需要5,可在索引0处获得。
因此,查询应为:
Select
floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws,
floor(split('5/0/3/0/4/4/143504', '[/]')[1]) as losses;
--Output:
draws losses
5 0
为了扩展这个例子,这些都是分裂:
Select
floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as e0,
floor(split('5/0/3/0/4/4/143504', '[/]')[1]) as e1,
floor(split('5/0/3/0/4/4/143504', '[/]')[2]) as e2,
floor(split('5/0/3/0/4/4/143504', '[/]')[3]) as e3,
floor(split('5/0/3/0/4/4/143504', '[/]')[4]) as e4,
floor(split('5/0/3/0/4/4/143504', '[/]')[5]) as e5,
floor(split('5/0/3/0/4/4/143504', '[/]')[6]) as e6;
--Output
e0 e1 e2 e3 e4 e5 e6
5 0 3 0 4 4 143504