Hive 从配置单元中的文本字符串获取特定值

Hive 从配置单元中的文本字符串获取特定值,hive,hiveql,Hive,Hiveql,我需要从配置单元表中下面的文本字符串中获取值5。出于某种原因,我使用的floor和split函数可以获得值“0”和“3”,但我不知道如何在第一个“/”前面获得第一个值: 使用0值而不是1,那么您将得到5值 hive> Select floor(split('5/0/3/0/4/4/143504', '[/]')[0]) as draws; +--------+--+ | draws | +--------+--+ | 5 | +-----

我需要从配置单元表中下面的文本字符串中获取值
5
。出于某种原因,我使用的floor和split函数可以获得值“0”和“3”,但我不知道如何在第一个“/”前面获得第一个值:


使用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       |
+--------+------+---------+--+
蜂巢
split()
函数接受两个参数
(字符串,正则表达式模式)
,并根据
regex
拆分
字符串。拆分将以数组的形式返回

可以通过数组索引访问每个拆分。您需要索引为0的5

因此,查询应为:

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
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