使用 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 提取表列中的多个字符串元素的主要内容,如果未能解决你的问题,请参考以下文章

提取hive中的数据

如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?

如何引用列中的第一个非空字符串 - Cloudera Impala / Apache Hive / Spark SQL

从 Hive 或 Webhdfs 运行 Impala Refresh

在 Impala/Hive 中删除多个分区

方括号内的 Impala/Hive 字符串提取