为什么json_extract有效但json_extract_scalar不起作用?

时间:2020-06-17 23:18:53

标签: sql json select presto

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

1 个答案:

答案 0 :(得分: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)