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

nhjlsmyf  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(359)

我需要得到价值 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
6pp0gazn

6pp0gazn1#

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

7qhs6swi2#

使用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       |
+--------+------+---------+--+

相关问题