在Hive中将数据拆分成多个列

4

我该如何在Hive表中将数据字符串分割成3个单独列?

示例输入数据:116:151:1。按gid,sid,rid进行拆分。

所需输出:

gid    sid     rid
116    151     1
2个回答

15

使用split()函数。您可以在文档中阅读有关它(以及所有其他Hive函数)的信息。

查询

select split("116:151:1", '\\:')[0] as gid
     , split("116:151:1", '\\:')[1] as sid
     , split("116:151:1", '\\:')[2] as rid
from database.table

输出:

gid    sid    rid
116    151    1
你需要将“116:151:1”替换为你表格中该列的名称。

那么,对于许多具有不同字符串的这类记录,语法如何改变?如果我尝试以上给出的命令,我的输出将为116 151 1,替换列中的所有其他记录值。 - vanj
1
读我刚刚写的最后一句话。 - o-90
是的,我看了。谢谢。但我仍在尝试将数据列分成3列。我已经尝试过正则表达式。但是我想知道如何使用regex_replace(split())来实现。 - vanj
1
我不知道还有什么可以告诉你的了。我的答案就是答案。按照我的回答所写的去做,只需将“116:151:1”替换为您想要拆分的列的名称即可。 - o-90
得到了解决方案 split(id1,':')[0], split(id1,':')[1], split(id1,':')[2], - vanj

0
使用split + 子查询解决了这个问题:
SELECT t.vec[0] AS gid, t.vec[1] AS sid, t.vec[2] AS rid
FROM (SELECT split("116:151:1", "[:]") AS vec) AS t;

在Hive中生成此输出:

+------+------+------+--+
| gid  | sid  | rid  |
+------+------+------+--+
| 116  | 151  | 1    |
+------+------+------+--+

你好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接