Извлечение из Json в AWS Афина или Престо - PullRequest
1 голос
/ 20 сентября 2019

Мой запрос ниже не дает мне никакого результата

 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

, это даст мне результат, чего мне здесь не хватает?Так что я могу заставить его работать за один выстрел Это вообще возможно?

1 Ответ

0 голосов
/ 21 сентября 2019

Вы ссылаетесь на неправильное имя столбца в вашем запросе, оно должно быть 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.

...