如何在Hive中提取字符之间的字符串



我有一个Hive表的列,其中包括一个字符串与多个主题名称。我希望拆分出第一个主题名称(如果可能的话,第二个和第三个)。该字符串最多可包含8个主题名称。

字符串的格式为:

["T.Topic1", "T.Topic2", "T.Topic3", "S.Topic4", "S.Topic5"]

我尝试了以下方法,但想知道是否有更好的方法,不需要删除左字符"和正确的字符"在后面的行中或可能提取多于第一个主题。

SELECT SUBSTR(split(l.Intent, '[\,]')[0], 2) AS TOPIC_1
FROM Table l

结果:

"T.Topic1"

谢谢

你离解决方案很近了。我建议你分两个阶段来解决这个问题。

  1. Remove Array
  2. 分割字符串
  • regexp_extract(l.Intent,'^\["(.*)"\]' )这将获得数组中的文本。
  • split ( text , '", "' )将把字符串分割成你想要的数组。

把它放在一起:

with l as (select '["T.Topic1", "T.Topic2", "T.Topic3", "S.Topic4", "S.Topic5"]' as Intent)
select
split ( 
regexp_extract(l.Intent,'^\["(.*)"\]')
, '", "' ) as array_of_topics 
from l as topics;

现在可以访问topics.array_of_topics[0]topics.array_of_topics[1]topics.array_of_topics[3]

最新更新