如何将Athena表中的JSON格式的值转换为干净的表格式?

ztmd8pv5  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(394)

我有一张table,看起来像下面。此数据来自放置在s3存储桶中的json文件。该表由AWS爬虫创建。
| 颜色0| col1|
| - -----|- -----|
| {“序列号”:“1”|“状态”:“通过”}|
| {“序列号”:“2”|“Status”:“FAIL”}|
我试图实现的是一个看起来像下面的表,基本上键应该成为列名和值作为记录。注意,在我的例子中有多个列:
| 序列号|工作状态|
| - -----|- -----|
| 1|通过|
| 2|未通过|
我尝试了openjson,UNNEST,但没有任何效果。我需要有一个SQL,它可以通过这个表,并动态返回所需格式的返回。我不能先输入值然后重新格式化。由于此SQL将每天自动在Grafana中运行,并且 Jmeter 板将显示结果。所以没有硬编码任何值的范围

cig3rfwq

cig3rfwq1#

这个答案假设原始的json是:

{
  "Serial No": "1",
  "Status": "PASS"
}

但爬虫将逗号上的数据分成两列。
根据你的样本,我也会假设你的数据是一致的。
您可以concat列,然后使用json_extract_scalar
下面是一个工作示例,看看它是如何工作的:

select
    json_extract_scalar(concat(col1, ',', col2), '$["Serial No"]') as "Serial No",
    json_extract_scalar(concat(col1, ',', col2), '$.Status') as "Status"
from (
        VALUES('{"Serial No":"1"', '"Status":"PASS"}'),
            ('{"Serial No":"2"', '"Status":"FAIL"}')
    ) as test_data(col1, col2)

给出以下结果:

相关问题