如何从 Athena SQL 查询中的 3 个表中获取所需的数据?

How to get the desired data from 3 tables in Athena SQL query?

Table 1 (aws_complianceitem) 没有主键并且此示例数据:

status severity compliancetype title resourceid region
compliant low security 2002 patch i-76765434 ap-south-2
noncompliant high audit 2002 kb patch i-76765434 ap-south-2
compliant medium security 2002 kb patch i-98765434 ap-south-1

Table 2 (aws_instanceinformation) 具有 ipaddressinstanceid 作为唯一键,并且具有以下示例数据:

computername instanceid ipaddress status accountid
SD-SDYH-re22 i-76765434 10.33.23.1 complianed 887878787654
noncompliant i-98765434 10.72.33.1 non-complianed 098776765478

Table 3 (configinstancestate) 具有 ipaddressresourceid 作为唯一键和此示例数据:

resourceid ipaddress instancestate
i-76765434 10.33.23.1 running
i-98765434 10.72.33.1 stopped

我需要所有实例 ID 为 运行 的数据。

这是期望的结果:

status instancestate severity title resourceid region ipaddress
compliant running low 2002 patch i-76765434 ap-south-2 10.33.23.1
noncompliant running high 2002 kb patch i-76765434 ap-south-2 10.33.23.1
compliant stopped medium 2002 kb patch i-98765434 ap-south-1 10.72.33.1

尝试使用以下查询进行完全外连接,

SELECT
    t1.status
    , t1.severity
    , t1.title
    , t1.region
    , t1.resourceid
    , t2.ipaddress
    , t2.computername
    , t2.status
    , t3.instancestate
FROM
    aws_complianceitem                      t1
    FULL OUTER JOIN aws_instanceinformation t2
        ON t1.resourceid = t2.instanceid
    FULL OUTER JOIN configinstancestate     t3
        ON t2.ipaddress = t3.resourceid

但是我们使用 instancestate=blank 过滤了作为此查询的一部分获得的结果,记录为空

似乎是两个内部联接 - 具有相关条件 - 做你想做的事:

select ac.*, c.*
from aws_complianceitem ac
inner join aws_instanceinformation ai 
    on ai.resourceid = ac.resourceid
inner join configinstancestate c
    on c.resourceid = ac.resourceid and c.ipaddress = ac.ipaddress