从 PrestoSQL 中的 varchar 中提取数组
Extract array from varchar in PrestoSQL
我有一个像这样的 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
请指教。我不断收到 Cannot cast VARCHAR to array/unnest type VARCHAR
您可以尝试使用 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 等。
我有一个像这样的 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
请指教。我不断收到 Cannot cast VARCHAR to array/unnest type VARCHAR
您可以尝试使用 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 等。