【问题标题】:Why json_extract works but json_extract_scalar does not?为什么 json_extract 有效,但 json_extract_scalar 无效?
【发布时间】:2020-10-07 21:56:21
【问题描述】:

我有一个数据集,其中包含 json 中的一个列,其中一个属性给了我一个列表,我想将其取消嵌套以加入一些不同的数据。

我想到了json_extract_scalar json_data,然后我可以split 它,最后unnest 进行其他操作,但是我遇到了问题。

在我的情况下,当我运行 json_extract 时它工作正常,但我无法转换为 varchar。另一方面,如果我使用json_extract_scalar,它会返回一个空值。

我认为问题应该是引号,但我不确定如何处理它——即使这是正确的问题。

让我给你一个数据样本:

{"my_test_list":["756596263-0","743349523-371296","756112380-0","755061590-0"]}

你们能给我一些建议吗?

我正在 Presto 中查询 SQL。

【问题讨论】:

    标签: sql json select presto


    【解决方案1】:

    您在键 my_test_list 下存储的是 JSON 数组,而不是标量值 - 这就是 json_extract_scalar() 返回 null 的原因。

    目前还不清楚您想如何使用这些数据。一个典型的解决方案是将cast 转换为array,然后您可以根据需要使用它,例如取消嵌套。基本语法是:

    cast(json_extract(mycol, '$.my_test_list') as array(varchar))
    

    然后您将在横向连接中使用它,例如:

    select t.mycol, x.myval
    from mytable t
    cross join unnest(
        cast(json_extract(mycol, '$.my_test_list') as array(varchar))
    ) as x(myval)
    

    【讨论】:

    • GMB,我数据集中的每一行都有一行这样的列表。我的想法是计算列表中的每个元素。所以项目“A”可以出现在跨行的几个列表中,我想计算一下。我不确定我是否按照自己的意愿表达清楚,但无论如何我感谢您的帮助
    • @DanielMiranda:所以:select x.myval, count(*) cnt from mytable t cross join unnest( cast(json_extract(mycol, '$.my_test_list') as array<varchar>) ) as x(myval) group by x.myval
    • 完美!它工作得很好,我可以做手术!谢谢,专线小巴!
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2020-05-14
    • 2023-03-30
    • 2013-05-13
    • 2011-09-06
    • 2020-02-19
    相关资源
    最近更新 更多