[英]athena / presto query
我有一个 json 保存在 Athena 表中
{
"VALIDATION_TYPE": "ROW_BY_ROW",
"DATABASE": "erp",
"TABLES": {
"APPLICATION_STATUS_TYPE": {
"BATCH_VALIDATION": {
"BATCHES": [{
"0": {
"FAILED": "FALSE",
"FAILURE_MSG": ""
}
}, {
"1": {
"FAILED": "TRUE",
"FAILURE_MSG": "NULL POINTER EXCEPTION"
}
}]
}
},
"APPLICATION": {
"BATCH_VALIDATION": {
"BATCHES": [{
"0": {
"FAILED": "FALSE",
"FAILURE_MSG": ""
}
}, {
"1": {
"FAILED": "TRUE",
"FAILURE_MSG": "NULL POINTER EXCEPTION"
}
}]
}
}
}
}
我需要在 Athena 中编写一个查询来查找,找到所有 FAILED=TRUE 记录,如下所示
output:
VALIDATION_TYPE,DATABASE,TABLE,ID,FAILED,FAILURE,FAIURE_MSG
----------------------------------------------------
ROW_BY_ROW,erp,APPLICATION_STATUS_TYPE,1,TRUE,NULL POINTER EXCEPTION
ROW_BY_ROW,erp,APPLICATION,1,TRUE,NULL POINTER EXCEPTION
我尝试了各种功能,如 TRANSFORM、UNNEST、JSON_EXTRACT 等,但还没有成功。 请告知我是否可以使用任何特定功能。
提前致谢
可以使用的一个技巧是将一些 json 部分转换为map(varchar, something)
和/或array
的:
-- sample data
with dataset(json_val) as (
values (json '{
"VALIDATION_TYPE": "ROW_BY_ROW",
"DATABASE": "erp",
"TABLES": {
"APPLICATION_STATUS_TYPE": {
"BATCH_VALIDATION": {
"BATCHES": [{
"0": {
"FAILED": "FALSE",
"FAILURE_MSG": ""
}
}, {
"1": {
"FAILED": "TRUE",
"FAILURE_MSG": "NULL POINTER EXCEPTION"
}
}]
}
},
"APPLICATION": {
"BATCH_VALIDATION": {
"BATCHES": [{
"0": {
"FAILED": "FALSE",
"FAILURE_MSG": ""
}
}, {
"1": {
"FAILED": "TRUE",
"FAILURE_MSG": "NULL POINTER EXCEPTION"
}
}]
}
}
}
}')
)
-- query
select json_extract_scalar(json_val, '$.VALIDATION_TYPE') VALIDATION_TYPE,
json_extract_scalar(json_val, '$.DATABASE') DATABASE,
t1.k "TABLE",
t3.k ID,
t3.map_v['FAILED'] FAILED,
t3.map_v['FAILURE_MSG'] FAILURE_MSG
from dataset
, unnest(cast(json_extract(json_val, '$.TABLES') as map(varchar, json))) as t1(k, v)
, unnest(cast(json_extract(t1.v, '$.BATCH_VALIDATION.BATCHES') as array(map(varchar, map(varchar, json))))) as t2(m)
, unnest(t2.m) as t3(k, map_v);
Output:
验证类型 | 数据库 | 桌子 | ID | 失败的 | FAILURE_MSG |
---|---|---|---|---|---|
行_行_行 | 企业资源计划 | 应用 | 0 | 错误的 | |
行_行_行 | 企业资源计划 | 应用 | 1个 | 真的 | NULL 指针异常 |
行_行_行 | 企业资源计划 | APPLICATION_STATUS_TYPE | 0 | 错误的 | |
行_行_行 | 企业资源计划 | APPLICATION_STATUS_TYPE | 1个 | 真的 | NULL 指针异常 |
然后你可以应用过滤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.