如何创建表AWS Athena - >映射Json数组?

时间:2017-11-06 10:39:45

标签: amazon-web-services amazon-athena

如何为Json Array格式创建表Athena(AWS)?

示例JSON格式:

Col_status  Col_Location    Min(Col_NUM)    count(Col_NUM)
---------- -------------    -------------   --------------
ON          AAA             1               2
OFF         AAA             3               1
ON          BBB             4               2
ON          CCC             6               1
ON          BBB             7               1
OFF         AAA             9               2

我想获得以下输出格式:
enter image description here

我试图根据这个网站解决问题 enter link description here

2 个答案:

答案 0 :(得分:3)

从您的示例JSON派生,您可以创建下表。

create external table test(
  Tapes array<struct<
        Status:string,
        Used:string,
        Barcode:string,
        Gateway:string,
        UsedGB:string,
        Date:string,
        SizeGB:string>>
) ROW FORMAT  serde 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://bucket/test'

使用该表,您可以通过以下方式查询所有数组元素。

select t1.* from test
cross join UNNEST(test.Tapes) as t1

答案 1 :(得分:0)

感谢您的回复

现在,我知道这个问题的原因是查询 我认为这是一个示例SQL查询

昨天,我在

下创建了表格语法
  CREATE external TABLE monlyreport (
        Tapes array<struct< Status:string,
      Used:double,
      Barcode:string,
      SizeGB:double,
      UsedGB:double,
      Date:date >>
       )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://bucket/test';

和预览表获取输出

tapes

    [{status=AVAILABLE, used=0.0, barcode=TEST5257F7, sizegb=107.0, usedgb=0.0, date=null}, {status=AVAILABLE, used=0.0, barcode=TEST5257F7, sizegb=107.0, usedgb=0.0, date=null}]

我尝试查询,但它不起作用

现在,我理解查询此问题

select n.status,n.used,n.barcode,n.gateway,n.usedgb,n.date,n.sizegb from test
cross join UNNEST(test.Tapes) as t (n)

非常感谢