【问题标题】:Extracting from Json in AWS Athena or Presto从 AWS Athena 或 Presto 中的 Json 中提取
【发布时间】:2020-01-21 12:53:36
【问题描述】:

我下面的查询没有给我任何结果

 WITH dataset AS (
    SELECT responseelements FROM cloudtrail_logs 
    WHERE useridentity.type = 'Root'
    AND eventname='CreateVpc'
    ORDER BY eventsource, eventname;
        AS blob
    )
    SELECT
      json_extract(blob, '$.vpc.vpcId') AS name,
      json_extract(blob, '$.ownerId') AS projects
    FROM dataset

但如果我只运行内部查询

SELECT responseelements FROM cloudtrail_logs 
WHERE useridentity.type = 'Root'
AND eventname='CreateVpc'
ORDER BY eventsource, eventname;

它给了我作为 Json 的正确响应

{"requestId":"40aaffac-2c53-419e-a678-926decc48557","vpc":{"vpcId":"vpc-01eff2919c7c1da07","state":"pending","ownerId":"347612567792","cidrBlock":"10.0.0.0/26","cidrBlockAssociationSet":{"items":[{"cidrBlock":"10.0.0.0/26","associationId":"vpc-cidr-assoc-04136293a8ac73600","cidrBlockState":{"state":"associated"}}]},"ipv6CidrBlockAssociationSet":{},"dhcpOptionsId":"dopt-92df95e9","instanceTenancy":"default","tagSet":{},"isDefault":false}}

如果我将其作为数据传递如下

WITH dataset AS (

SELECT '{"requestId":"40aaffac-2c53-419e-a678-926decc48557","vpc":{"vpcId":"vpc-01eff2919c7c1da07","state":"pending","ownerId":"347612567792","cidrBlock":"10.0.0.0/26","cidrBlockAssociationSet":{"items":[{"cidrBlock":"10.0.0.0/26","associationId":"vpc-cidr-assoc-04136293a8ac73600","cidrBlockState":{"state":"associated"}}]},"ipv6CidrBlockAssociationSet":{},"dhcpOptionsId":"dopt-92df95e9","instanceTenancy":"default","tagSet":{},"isDefault":false}}'

    AS blob
)
SELECT
  json_extract(blob, '$.vpc.vpcId') AS name,
  json_extract(blob, '$.ownerId') AS projects
FROM dataset

它给了我结果,我在这里缺少什么?这样我就可以一口气运行 有可能吗?

【问题讨论】:

    标签: json amazon-web-services presto amazon-athena


    【解决方案1】:

    您在查询中引用了错误的列名,它应该是 json_extract(responseelements, '$.vpc.vpcId') AS name 而不是 json_extract(blob, '$.vpc.vpcId') AS name。这个查询的AS blob 部分什么都不做,因为你不能为整个查询设置别名,所以把它去掉。

    AS blob 在您的最后一个示例中有效,因为您正在将一个值(json 字符串)选择到一个列中,而AS blob 为该列提供了一个名称或“blob”的别名 .在您的原始查询中,您选择了一个名为 responseelements 的现有列,这就是您需要在 json_extract 函数中引用的内容。

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2019-07-24
      • 2021-10-18
      • 2021-08-29
      • 2020-09-10
      • 2020-01-13
      • 2018-12-20
      • 2019-12-28
      • 2020-11-07
      相关资源
      最近更新 更多