首页 > 解决方案 > 为什么 json_extract 有效但 json_extract_scalar 无效?

问题描述

我有一个数据集,其中包含 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。

标签: sqljsonselectpresto

解决方案


您在 key 下存储的my_test_list是 JSON 数组,而不是标量值 - 这就是为什么json_extract_scalar()返回null.

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

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)

推荐阅读