逗号分隔字符串到单个行 - Impala SQL

时间:2016-05-23 19:38:56

标签: sql split cloudera impala

假设我们有一张桌子:

Owner   | Pets
------------------------------
Jack    | "dog, cat, crocodile" 
Mary    | "bear, pig"

我希望得到结果:

Owner   | Pets
------------------------------
Jack    | "dog"
Jack    | "cat"
Jack    | "crocodile" 
Mary    | "bear"
Mary    | "pig"

我通过谷歌搜索找到了类似问题的一些解决方案,但Impala SQL没有提供任何这些功能来应用建议的解决方案。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

以下适用于Impala:

split_part(string source, string delimiter, bigint n)

您可以在此处找到文档:

https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html

答案 1 :(得分:0)

您必须使用Hive SQL进行此操作。

因此,让我们创建黑斑羚表

-- imapla sql
CREATE TABLE IF NOT EXISTS tmp.my_example (
  `Owner` VARCHAR,
  Pets VARCHAR
);

INSERT INTO tmp.my_example (`Owner`, `Pets`) VALUES
('Jack', 'dog, cat, crocodile'),
('Mary', 'bear, pig');

然后使用配置单元sql将列拆分为行:

-- hive sql
select f.owner as owner, t1.pos as pos, t1.val AS pet
from tmp.my_example f
lateral view posexplode(split(pets,', ')) t1 

如果将结果另存为新表,请不要忘记在impala中运行refresh new_table以便可以使用新表

P.S。对于这个小桌子,Hive的速度令人难以置信,但对真实数据却表现合理