使用 Impala 或 Hive 提取表列中的多个字符串元素
Posted
技术标签:
【中文标题】使用 Impala 或 Hive 提取表列中的多个字符串元素【英文标题】:Extract multiple string elements in table column using Impala or Hive 【发布时间】:2020-08-21 07:42:03 【问题描述】:我有一列 A ,其中元素由具有多个 string 元素(不是数组)的列表组成,例如:
**A**
1 'A123','B234','C123'
2 'A123','B234'
3 'A124',
列表元素的数量因记录而异。然而,列表元素始终具有相同的长度并用逗号分隔。
我需要将这些字符串元素提取到单独的表/列表 B 中并获取不同的元素,例如:
**B**
1 'A123'
2 'A124'
3 'B234'
4 'C123'
如何使用 SQL 来做到这一点?我正在使用 Impala 或 Hive 我正在使用 Cloudera Hue 进行分析。
谢谢,
KS
【问题讨论】:
【参考方案1】:首先使用lateral view explode
创建一个包含数组元素的列,然后dictinct,例如
SELECT distinct elem as col1
FROM tableA LATERAL VIEW explode(split(array_column, ',')) aTable AS elem
有关lateral view
的更多详细信息,请参阅Hive's manual
【讨论】:
elem
周围不需要括号。 DISTINCT
不是函数。
您好,不幸的是,您的答案在我的情况下不起作用,因为我的列是一个字符串值(我猜)。我收到以下错误消息:编译语句时出错:FAILED:UDFArgumentException explode() 将数组或映射作为参数
@KostaS。我想你的元素用逗号分隔。在这种情况下,您需要拆分字符串,然后爆炸。我已经编辑了答案。以上是关于使用 Impala 或 Hive 提取表列中的多个字符串元素的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?
如何引用列中的第一个非空字符串 - Cloudera Impala / Apache Hive / Spark SQL