我有一个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"
谢谢
你离解决方案很近了。我建议你分两个阶段来解决这个问题。
- Remove Array
- 分割字符串
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]
行