Почему json_extract работает, а json_extract_scalar - нет? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть набор данных, содержащий столбец в 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"]}

Ребята, вы можете дать мне совет?

Я запрашиваю SQL в Престо.

1 Ответ

1 голос
/ 18 июня 2020

То, что вы храните под ключом 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)
...