sql - 如何使用 presto 获取字符串列中的第一个元组

所以我在table中有一个列,该列的数据类型是varchar,但它包含一个tuples数组,所以我需要提取

这是原来的 table

userid comments
1 [["hello world",1],["How did you",1],[" this is the one",1]]
2 [["hello ",1],["How ",1],[" this",1]]

这就是我要查找的内容,请注意“评论”列的数据类型是 varchar。

userid comments
1 hello world
2 hello

回答1

https://prestodb.io/docs/current/functions/json.html#json_extract_scalar 应该可以解决问题:

WITH dataset (userid, comments) AS (
    VALUES  (1, json '[["hello world",1],["How did you",1],[" this is the one",1]]'),
            (2, json '[["hello ",1],["How ",1],[" this",1]]')
)

--query
select userid,
    json_extract_scalar(comments, '$[0][0]')
from dataset

输出:

userid comments
1 hello world
2 hello

请注意,它只允许提取单个 value,如果您想要多个 values,则需要进行一些转换(类似于在 https://stackoverflow.com/questions/72262711/parse-json-column-using-presto/72262926#72262926 中完成的操作,但使用 arrays,例如 array(json))。