逗号分隔的字符串到单独的行-impala sql

lmvvr0a8  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(1077)

假设我们有一张table:

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

我想得到的结果是:

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

我通过google找到了一些类似问题的解决方案,但是impalasql没有提供任何这些功能来应用建议的解决方案。
任何帮助都将不胜感激!

kiayqfof

kiayqfof1#

Impala 的以下作品:

split_part(string source, string delimiter, bigint n)

您可以在此处找到文档:
https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html

jbose2ul

jbose2ul2#

您必须使用配置单元sql来执行此操作。
所以让我们创建impala表

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

如果将结果保存为新表,请不要忘记运行 refresh new_table 在 Impala ,以便您的新表可以使用
p、 对于这个小表来说,hive的速度非常慢,但是对于实际数据来说,它的性能是合理的

相关问题