#sql #presto
Вопрос:
У меня есть поле VARCHAR, подобное этому:
[
{
"config": 0,
"type": "0
},
{
"config": x,
"type": "1"
},
{
"config": "",
"type": ""
},
{
"config": [
{
"address": {},
"category": "",
"merchant": {
"data": [
10,12,23
],
"file": 0
},
"range_id": 1,
"shop_id_info": null
}
],
"type": "new"
}
]
И мне нужно извлечь из этого данные о продавцах. Желаемым результатом является:
10
12
23
Пожалуйста, посоветуйте. Я продолжаю получать Не могу привести VARCHAR к типу массива/unnest VARCHAR
Ответ №1:
Вы можете попробовать использовать путь json $.*.config.*.merchant.data.*
, но если это не работает для вас (как для меня в версии Athena, где массивы в пути json не поддерживаются должным образом), вы можете привести свой json в ARRAY(JSON)
и выполнить некоторые манипуляции оттуда (необходимо немного исправить ваш JSON).:
Данные испытаний:
WITH dataset AS (
SELECT * FROM (VALUES
(JSON '[
{
"config": {},
"type": "0"
},
{
"config": "x",
"type": "1"
},
{
"config": "",
"type": ""
},
{
"config": [
{
"address": {},
"category": "",
"merchant": {
"data": [
10,12,23
],
"file": 0
},
"range_id": 1,
"shop_id_info": null
}
],
"type": "new"
}
]')
) AS t (json_value))
И запрос:
SELECT flatten(
transform(
flatten(
transform(
CAST(json_value AS ARRAY(JSON))
, json_object -> try(CAST(json_extract(json_object, '$.config') AS ARRAY(JSON))))),
json_config -> CAST(json_extract(json_config, '$.merchant.data') as ARRAY(INTEGER))))
FROM dataset
Что даст вам массив чисел:
_col0 |
---|
[10, 12, 23] |
И оттуда вы можете продолжить с unnest и так далее, если это необходимо.
Комментарии:
1. @itsmethubui был рад помочь!