我有一个 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
你真的很接近解决方案。我建议你尝试分两个阶段解决它。
- 移除阵列
- 拆分字符串。
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]