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

我有一个 Hive table 列,其中包含一个具有多个主题名称的字符串。我希望拆分第一个主题名称(如果可能的话,第二个和第三个)。该字符串最多可以包含 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

你真的很接近解决方案。我建议你尝试分两个阶段解决它。

  1. 移除阵列
  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]

相似文章

最新文章